JarFile — JAR 파일 읽기

JarFile — JAR 파일 읽기

JarFile 클래스는 java.io.RandomAccessFile로 열 수 있는 어떤 파일에서든 JAR 파일의 내용을 읽는 데 사용돼요. java.util.zip.ZipFile을 확장하면서 선택적 Manifest 항목 읽기와 멀티-릴리즈 jar 파일 처리를 지원해요.

출처: Java API Reference

본문

public class JarFile extends ZipFile

Manifest는 jar 파일과 그 항목들에 대한 메타 정보를 지정하는 데 쓰여요. 멀티-릴리즈 jar 파일"Multi-Release"라는 메인 속성을 가진 manifest, 공개 클래스로 이루어진 "base" 항목 집합, 그리고 META-INF/versions 디렉터리의 서브디렉터리에 있는 "versioned" 항목 집합을 포함하는 jar 파일이에요. n > 8인 버전 nMETA-INF/versions/{n} 항목은 base 항목과 그보다 낮은 버전을 덮어써요.

기본적으로 멀티-릴리즈 jar용 JarFile은 평범한(비-버전) jar처럼 처리하도록 구성돼요. 멀티-릴리즈 처리를 하려면 JarFile(File, boolean, int, Runtime.Version) 생성자로 만들어요. Runtime.Version 객체는 버전 항목 검색 시 사용되는 최대 버전을 설정해요.

상수

MANIFEST_NAME은 JAR manifest 파일 이름이에요. 그 외에 ZIP 파일 포맷의 각 헤더를 위한 시그니처(LOCSIG, EXTSIG, CENSIG, ENDSIG), 크기(LOCHDR 등), 오프셋(LOCVER~ENDCOM) 상수들이 있어요.

생성자

JarFile(String name), JarFile(String name, boolean verify), JarFile(File file), JarFile(File file, boolean verify), JarFile(File file, boolean verify, int mode), JarFile(File file, boolean verify, int mode, Runtime.Version version) — 각각 서명된 jar면 검증하는 생성자들이에요. modeOPEN_READ 또는 OPEN_READ | OPEN_DELETE여야 해요. version이 지정된 생성자는 멀티-릴리즈 jar 처리를 위한 최대 버전을 설정해요 (전부 IOException을 던질 수 있어요).

정적 메서드

  • baseVersion() — 멀티-릴리즈 jar의 비-버전 구성을 나타내는 버전을 반환해요.
  • runtimeVersion() — 유효한 런타임 버전 구성을 나타내는 버전을 반환해요. jdk.util.jar.version 프로퍼티가 설정되면 그 값이 우선돼요.

멀티-릴리즈 관련

  • getVersion() — 버전 항목 검색 시 사용할 최대 버전을 반환해요.
  • isMultiRelease() — 이 jar 파일이 멀티-릴리즈인지 여부를 반환해요.
  • getJarEntry(String name) / getEntry(String name) — 주어진 base 항목 이름에 해당하는 최신 버전 항목의 JarEntry/ZipEntry를 반환해요.
  • versionedStream() — 멀티-릴리즈로 구성된 경우 버전 항목의 스트림을 반환하고, 아니면 stream()과 같은 결과를 반환해요.

읽기

  • getManifest() — jar 파일 manifest를 반환하고, 없으면 null을 반환해요.
  • entries() — jar 파일 항목의 Enumeration을 반환해요.
  • stream() — 중앙 디렉터리 순서의 정렬된 항목 Stream을 반환해요.
  • getInputStream(ZipEntry ze) — 지정된 항목의 내용을 읽는 입력 스트림을 반환해요.

더 알아보기 (Learn more)