JarFile — JAR 파일 읽기
JarFile — JAR 파일 읽기
JarFile 클래스는 java.io.RandomAccessFile로 열 수 있는 어떤 파일에서든 JAR 파일의 내용을 읽는 데 사용돼요. java.util.zip.ZipFile을 확장하면서 선택적 Manifest 항목 읽기와 멀티-릴리즈 jar 파일 처리를 지원해요.
본문
public class JarFile extends ZipFile
Manifest는 jar 파일과 그 항목들에 대한 메타 정보를 지정하는 데 쓰여요. 멀티-릴리즈 jar 파일은 "Multi-Release"라는 메인 속성을 가진 manifest, 공개 클래스로 이루어진 "base" 항목 집합, 그리고 META-INF/versions 디렉터리의 서브디렉터리에 있는 "versioned" 항목 집합을 포함하는 jar 파일이에요. n > 8인 버전 n의 META-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면 검증하는 생성자들이에요. mode는 OPEN_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)— 지정된 항목의 내용을 읽는 입력 스트림을 반환해요.