Класс JarFile
- Все реализованные интерфейсы:
Closeable, AutoCloseable
public class JarFile extends ZipFile
JarFile предназначен для чтения содержимого JAR-файла из любого файла, который можно открыть с помощью java.io.RandomAccessFile. Он расширяет класс java.util.zip.ZipFile, добавляя поддержку чтения необязательной записи Manifest и обработки многоверсионных JAR-файлов. Manifest можно использовать для указания метаинформации о JAR-файле и его записях. Многоверсионный JAR-файл — это JAR-файл, содержащий манифест с главным атрибутом с именем "Multi-Release", набор «базовых» записей, некоторые из которых являются открытыми классами с открытыми или защищёнными методами, составляющими открытый интерфейс JAR-файла, а также набор «версионированных» записей, содержащихся в подкаталогах каталога "META-INF/versions". Версионированные записи распределены по основным версиям платформы Java. Версионированная запись с версией n, 8 < n, в каталоге "META-INF/versions/{n}" переопределяет базовую запись, а также любую запись с номером версии i, где 8 < i < n.
По умолчанию JarFile для многоверсионного JAR-файла настроен на обработку этого файла как обычного (неверсионированного) JAR-файла, поэтому имени записи соответствует не более одной базовой записи. JarFile можно настроить для обработки многоверсионного JAR-файла, создав JarFile с помощью конструктора JarFile(File, boolean, int, Runtime.Version). Объект Runtime.Version задаёт максимальную версию, используемую при поиске версионированных записей. При такой настройке имени записи может соответствовать не более одной базовой записи и ноль или более версионированных записей. Для сопоставления имени записи с последней версионированной записью, версия которой меньше или равна максимальной версии, требуется поиск (см. getEntry(String)).
Загрузчики классов, использующие JarFile для загрузки классов из содержимого записей JarFile, должны создавать JarFile, вызывая конструктор JarFile(File, boolean, int, Runtime.Version) и передавая значение Runtime.version() в качестве последнего аргумента. Это гарантирует загрузку из многоверсионных JAR-файлов классов, совместимых с основной версией работающей JVM.
Если при открытии подписанного JAR-файла установлен флаг verify, содержимое записи JAR проверяется по подписи, встроенной в манифест, связанный с её path name. В многоверсионном JAR-файле содержимое версионированной записи проверяется по собственной подписи, а метод JarEntry.getCodeSigners() возвращает её собственных подписантов.
Обратите внимание, что процесс проверки не включает проверку сертификата подписанта. Вызывающей стороне следует проверить возвращаемое значение JarEntry.getCodeSigners(), чтобы дополнительно определить, заслуживает ли подпись доверия.
Если не указано иное, передача аргумента null конструктору или методу этого класса приводит к выбрасыванию исключения NullPointerException.
- Примечание по реализации:
- Если API нельзя использовать для настройки
JarFile(например, чтобы переопределить конфигурацию скомпилированного приложения или библиотеки), доступны два свойстваSystem.- Свойству
jdk.util.jar.versionможно присвоить значение, представляющее собойStringнеотрицательного целого числа<= Runtime.version().feature(). Это значение используется для установки эффективной версии среды выполнения, отличной от значения по умолчанию, получаемого при вычисленииRuntime.version().feature(). Эффективная версия среды выполнения — это версия, используемая конструкторомJarFile(File, boolean, int, Runtime.Version), если значение последнего аргумента равноJarFile.runtimeVersion(). - Свойству
jdk.util.jar.enableMultiReleaseможно присвоить одно из трёх значенийString: true, false или force. Значение true, используемое по умолчанию, включает обработку многоверсионных JAR-файлов. Значение false отключает такую обработку: атрибут манифеста "Multi-Release" и каталоги версий в многоверсионном JAR-файле, если они есть, игнорируются. Кроме того, методisMultiRelease()возвращает false. Значение force приводит к инициализацииJarFileс версиями среды выполнения после создания объекта. Фактически это эквивалентно следующему коду:(new JarFile(File, boolean, int, JarFile.runtimeVersion()).
- Свойству
- С момента:
- 1.2
- См. также:
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final int |
CENATT |
Смещение поля внутренних атрибутов файла в заголовке центрального каталога (CEN). |
static final int |
CENATX |
Смещение поля внешних атрибутов файла в заголовке центрального каталога (CEN). |
static final int |
CENCOM |
Смещение поля длины комментария в заголовке центрального каталога (CEN). |
static final int |
CENCRC |
Смещение поля значения CRC-32 несжатого файла в заголовке центрального каталога (CEN). |
static final int |
CENDSK |
Смещение поля начального номера диска в заголовке центрального каталога (CEN). |
static final int |
CENEXT |
Смещение поля длины дополнительных данных в заголовке центрального каталога (CEN). |
static final int |
CENFLG |
Смещение поля флагов шифрования и дешифрования в заголовке центрального каталога (CEN). |
static final int |
CENHDR |
Размер заголовка центрального каталога (CEN) в байтах (включая сигнатуру). |
static final int |
CENHOW |
Смещение поля метода сжатия в заголовке центрального каталога (CEN). |
static final int |
CENLEN |
Смещение поля размера несжатого файла в заголовке центрального каталога (CEN). |
static final int |
CENNAM |
Смещение поля длины имени файла в заголовке центрального каталога (CEN). |
static final int |
CENOFF |
Смещение поля смещения заголовка LOC в заголовке центрального каталога (CEN). |
static final long |
CENSIG |
Сигнатура заголовка центрального каталога (CEN). |
static final int |
CENSIZ |
Смещение поля размера сжатого файла в заголовке центрального каталога (CEN). |
static final int |
CENTIM |
Смещение поля времени изменения в заголовке центрального каталога (CEN). |
static final int |
CENVEM |
Смещение поля версии, создавшей заголовок центрального каталога (CEN). |
static final int |
CENVER |
Смещение поля версии, необходимой для извлечения данных, в заголовке центрального каталога (CEN). |
static final int |
ENDCOM |
Смещение поля длины комментария ZIP-файла в заголовке конца центрального каталога (END). |
static final int |
ENDHDR |
Размер заголовка конца центрального каталога (END) в байтах (включая сигнатуру). |
static final int |
ENDOFF |
Смещение поля заголовка конца центрального каталога (END), указывающего смещение первого заголовка CEN. |
static final long |
ENDSIG |
Сигнатура заголовка конца центрального каталога (END). |
static final int |
ENDSIZ |
Смещение поля размера центрального каталога в байтах в заголовке конца центрального каталога (END). |
static final int |
ENDSUB |
Смещение поля числа записей на этом диске в заголовке конца центрального каталога (END). |
static final int |
ENDTOT |
Смещение поля общего числа записей в заголовке конца центрального каталога (END). |
static final int |
EXTCRC |
Смещение поля значения CRC-32 несжатого файла в дополнительном локальном заголовке (EXT). |
static final int |
EXTHDR |
Размер дополнительного локального заголовка (EXT) в байтах (включая сигнатуру). |
static final int |
EXTLEN |
Смещение поля размера несжатого файла в дополнительном локальном заголовке (EXT). |
static final long |
EXTSIG |
Сигнатура дополнительного локального заголовка (EXT). |
static final int |
EXTSIZ |
Смещение поля размера сжатого файла в дополнительном локальном заголовке (EXT). |
static final int |
LOCCRC |
Смещение поля значения CRC-32 несжатого файла в заголовке локального файла (LOC). |
static final int |
LOCEXT |
Смещение поля длины дополнительных данных в заголовке локального файла (LOC). |
static final int |
LOCFLG |
Смещение поля флагов общего назначения в заголовке локального файла (LOC). |
static final int |
LOCHDR |
Размер заголовка локального файла (LOC) в байтах (включая сигнатуру). |
static final int |
LOCHOW |
Смещение поля метода сжатия в заголовке локального файла (LOC). |
static final int |
LOCLEN |
Смещение поля размера несжатого файла в заголовке локального файла (LOC). |
static final int |
LOCNAM |
Смещение поля длины имени файла в заголовке локального файла (LOC). |
static final long |
LOCSIG |
Сигнатура заголовка локального файла (LOC). |
static final int |
LOCSIZ |
Смещение поля размера сжатого файла в заголовке локального файла (LOC). |
static final int |
LOCTIM |
Смещение поля времени изменения в заголовке локального файла (LOC). |
static final int |
LOCVER |
Смещение поля версии, необходимой для извлечения данных, в заголовке локального файла (LOC). |
static final String |
MANIFEST_NAME |
Имя файла манифеста JAR. |
Поля, объявленные в классе ZipFile
OPEN_DELETE, OPEN_READ | Модификатор и тип | Поле | Описание |
|---|---|---|
static final int |
OPEN_DELETE |
Флаг режима для открытия ZIP-файла с пометкой на удаление. |
static final int |
OPEN_READ |
Флаг режима для открытия ZIP-файла для чтения. |
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
JarFile |
Создаёт новый JarFile для чтения из указанного объекта File. |
JarFile |
Создаёт новый JarFile для чтения из указанного объекта File. |
JarFile |
Создаёт новый JarFile для чтения из указанного объекта File в заданном режиме. |
JarFile |
Создаёт новый JarFile для чтения из указанного объекта File в заданном режиме. |
JarFile |
Создаёт новый JarFile для чтения из указанного файла name. |
JarFile |
Создаёт новый JarFile для чтения из указанного файла name. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
static Runtime.Version |
baseVersion() |
Возвращает версию, представляющую конфигурацию многоверсионного JAR-файла без версий. |
Enumeration |
entries() |
Возвращает перечисление записей JAR-файла. |
ZipEntry |
getEntry |
Возвращает ZipEntry для заданного имени базовой записи или null, если запись не найдена. |
InputStream |
getInputStream |
Возвращает входной поток для чтения содержимого указанной записи ZIP-файла. |
JarEntry |
getJarEntry |
Возвращает JarEntry для заданного имени базовой записи или null, если запись не найдена. |
Manifest |
getManifest() |
Возвращает манифест JAR-файла или null, если манифеста нет. |
final Runtime.Version |
getVersion() |
Возвращает максимальную версию, используемую при поиске версионированных записей. |
final boolean |
isMultiRelease() |
Показывает, является ли этот JAR-файл многоверсионным. |
static Runtime.Version |
runtimeVersion() |
Возвращает версию, представляющую эффективную конфигурацию многоверсионного JAR-файла с версиями среды выполнения. |
Stream |
stream() |
Возвращает упорядоченный Stream записей JAR-файла. |
Stream |
versionedStream() |
Возвращает Stream версионированных записей JAR-файла. |
Методы, объявленные в классе ZipFile
close, getComment, getName, size, toString | Модификатор и тип | Метод | Описание |
|---|---|---|
void |
close() |
Закрывает ZIP-файл. |
String |
getComment() |
Возвращает комментарий ZIP-файла. |
String |
getName() |
Возвращает имя пути ZIP-файла. |
int |
size() |
Возвращает число записей в ZIP-файле. |
String |
toString() |
Возвращает строку, идентифицирующую этот ZipFile, для отладки. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создаёт и возвращает копию этого объекта. |
boolean |
equals |
Показывает, равен ли какой-либо другой объект этому объекту. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии. Финализация объявлена устаревшей и будет удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс среды выполнения этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
final void |
wait() |
Переводит текущий поток в состояние ожидания до его пробуждения, обычно в результате вызова notify или interrupt. |
final void |
wait |
Переводит текущий поток в состояние ожидания до его пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного интервала реального времени. |
final void |
wait |
Переводит текущий поток в состояние ожидания до его пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного интервала реального времени. |
Подробное описание полей
MANIFEST_NAME
public static final String MANIFEST_NAME
- См. также:
LOCSIG
static final long LOCSIG
- См. также:
EXTSIG
static final long EXTSIG
- См. также:
CENSIG
static final long CENSIG
- См. также:
ENDSIG
static final long ENDSIG
- См. также:
LOCHDR
static final int LOCHDR
- См. также:
EXTHDR
static final int EXTHDR
- См. также:
CENHDR
static final int CENHDR
- См. также:
ENDHDR
static final int ENDHDR
- См. также:
LOCVER
static final int LOCVER
- См. также:
LOCFLG
static final int LOCFLG
- См. также:
LOCHOW
static final int LOCHOW
- См. также:
LOCTIM
static final int LOCTIM
- См. также:
LOCCRC
static final int LOCCRC
- См. также:
LOCSIZ
static final int LOCSIZ
- См. также:
LOCLEN
static final int LOCLEN
- См. также:
LOCNAM
static final int LOCNAM
- См. также:
LOCEXT
static final int LOCEXT
- См. также:
EXTCRC
static final int EXTCRC
- См. также:
EXTSIZ
static final int EXTSIZ
- См. также:
EXTLEN
static final int EXTLEN
- См. также:
CENVEM
static final int CENVEM
- См. также:
CENVER
static final int CENVER
- См. также:
CENFLG
static final int CENFLG
- См. также:
CENHOW
static final int CENHOW
- См. также:
CENTIM
static final int CENTIM
- См. также:
CENCRC
static final int CENCRC
- См. также:
CENSIZ
static final int CENSIZ
- См. также:
CENLEN
static final int CENLEN
- См. также:
CENNAM
static final int CENNAM
- См. также:
CENEXT
static final int CENEXT
- См. также:
CENCOM
static final int CENCOM
- См. также:
CENDSK
static final int CENDSK
- См. также:
CENATT
static final int CENATT
- См. также:
CENATX
static final int CENATX
- См. также:
CENOFF
static final int CENOFF
- См. также:
ENDSUB
static final int ENDSUB
- См. также:
ENDTOT
static final int ENDTOT
- См. также:
ENDSIZ
static final int ENDSIZ
- См. также:
ENDOFF
static final int ENDOFF
- См. также:
ENDCOM
static final int ENDCOM
- См. также:
Подробное описание конструкторов
JarFile
public JarFile(String name) throws IOException
JarFile для чтения из указанного файла name. Если JarFile подписан, его подпись будет проверена.- Параметры:
-
name— имя JAR-файла, который нужно открыть для чтения - Исключения:
-
IOException— если произошла ошибка ввода-вывода
JarFile
public JarFile(String name, boolean verify) throws IOException
JarFile для чтения из указанного файла name.- Параметры:
-
name— имя JAR-файла, который нужно открыть для чтения -
verify— следует ли проверять подпись JAR-файла, если он подписан. - Исключения:
-
IOException— если произошла ошибка ввода-вывода
JarFile
public JarFile(File file) throws IOException
JarFile для чтения из указанного объекта File. Если JarFile подписан, его подпись будет проверена.- Параметры:
-
file— JAR-файл, который нужно открыть для чтения - Исключения:
-
IOException— если произошла ошибка ввода-вывода
JarFile
public JarFile(File file, boolean verify) throws IOException
JarFile для чтения из указанного объекта File.- Параметры:
-
file— JAR-файл, который нужно открыть для чтения -
verify— следует ли проверять подпись JAR-файла, если он подписан. - Исключения:
-
IOException— если произошла ошибка ввода-вывода
JarFile
public JarFile(File file, boolean verify, int mode) throws IOException
JarFile для чтения из указанного объекта File в заданном режиме. Аргумент режима должен иметь значение OPEN_READ или OPEN_READ | OPEN_DELETE.- Параметры:
-
file— JAR-файл, который нужно открыть для чтения -
verify— следует ли проверять подпись JAR-файла, если он подписан. -
mode— режим, в котором следует открыть файл - Исключения:
-
IOException— если произошла ошибка ввода-вывода -
IllegalArgumentException— если аргументmodeнедопустим - С версии:
- 1.3
JarFile
public JarFile(File file, boolean verify, int mode, Runtime.Version version) throws IOException
JarFile для чтения из указанного объекта File в заданном режиме. Аргумент режима должен иметь значение OPEN_READ или OPEN_READ | OPEN_DELETE. Аргумент версии после преобразования в каноническую форму используется для настройки JarFile при обработке многоверсионных JAR-файлов. Каноническая форма, полученная из параметра версии, — Runtime.Version.parse(Integer.toString(n)), где n — Math.max(version.feature(), JarFile.baseVersion().feature()).
- Параметры:
-
file— JAR-файл, который нужно открыть для чтения -
verify— следует ли проверять подпись JAR-файла, если он подписан. -
mode— режим, в котором следует открыть файл -
version— указывает версию выпуска для многоверсионного JAR-файла - Исключения:
-
IOException— если произошла ошибка ввода-вывода -
IllegalArgumentException— если аргументmodeнедопустим -
NullPointerException— еслиversionимеет значениеnull - С версии:
- 9
Подробное описание методов
baseVersion
public static Runtime.Version baseVersion()
- Возвращает:
- версию, соответствующую конфигурации без указания версии
- С версии:
- 9
runtimeVersion
public static Runtime.Version runtimeVersion()
По умолчанию номер версии функции возвращённого Version будет совпадать с номером версии функции Runtime.version(). Однако, если задано свойство jdk.util.jar.version, возвращённый Version определяется этим свойством, поэтому номера версий функций могут не совпадать.
- Возвращает:
- версию, соответствующую конфигурации с учётом версии среды выполнения
- С версии:
- 9
getVersion
public final Runtime.Version getVersion()
Если этот JarFile не является многоверсионным JAR-файлом или не настроен для обработки в таком режиме, возвращаемая версия будет совпадать с версией, возвращаемой методом baseVersion().
- Возвращает:
- максимальную версию
- С версии:
- 9
isMultiRelease
public final boolean isMultiRelease()
- Возвращает:
- true, если этот JarFile является многоверсионным JAR-файлом
- С версии:
- 9
getManifest
public Manifest getManifest() throws IOException
null, если он отсутствует.- Возвращает:
- манифест JAR-файла или
null, если он отсутствует - Исключения:
-
IllegalStateException— может быть выброшено, если JAR-файл закрыт -
IOException— если произошла ошибка ввода-вывода
getJarEntry
public JarEntry getJarEntry(String name)
JarEntry для заданного имени базовой записи или null, если запись не найдена. Если этот JarFile является многоверсионным JAR-файлом и настроен для обработки в таком режиме, выполняется поиск и возвращается JarEntry, представляющая последнюю версию записи, связанной с заданным именем. Возвращённая JarEntry — это запись с указанием версии, соответствующая заданному имени базовой записи с префиксом "META-INF/versions/{n}/", для наибольшего значения n, для которого существует запись. Если такой записи с указанием версии нет, возвращается JarEntry базовой записи; если записи не найдены, возвращается null. Начальным значением версии n является максимальная версия, возвращаемая методом getVersion().
- Требования к реализации:
- Эта реализация вызывает
getEntry(String). - Параметры:
-
name— имя записи в JAR-файле - Возвращает:
JarEntryдля заданного имени записи или записи с указанием версии либоnull, если запись не найдена- Исключения:
-
IllegalStateException— может быть выброшено, если JAR-файл закрыт - См. также:
getEntry
public ZipEntry getEntry(String name)
ZipEntry для заданного имени базовой записи или null, если запись не найдена. Если этот JarFile является многоверсионным JAR-файлом и настроен для обработки в таком режиме, выполняется поиск и возвращается ZipEntry, представляющая последнюю версию записи, связанной с заданным именем. Возвращённая ZipEntry — это запись с указанием версии, соответствующая заданному имени базовой записи с префиксом "META-INF/versions/{n}/", для наибольшего значения n, для которого существует запись. Если такой записи с указанием версии нет, возвращается ZipEntry базовой записи; если записи не найдены, возвращается null. Начальным значением версии n является максимальная версия, возвращаемая методом getVersion().
- Переопределяет:
-
getEntryв классеZipFile - Требования к реализации:
- Эта реализация может вернуть запись с указанием версии для запрошенного имени, даже если соответствующей базовой записи нет. Это возможно, если найдена соответствующая запись с указанием версии, доступная только внутри класса или пакета. При переопределении этого метода убедитесь, что переопределённый метод вызывает
super.getEntry(name)для получения всех записей с указанием версии. - Параметры:
-
name— имя записи в JAR-файле - Возвращает:
ZipEntryдля заданного имени записи или имя записи с указанием версии либоnull, если запись не найдена- Исключения:
-
IllegalStateException— может быть выброшено, если JAR-файл закрыт - См. также:
entries
public Enumeration<JarEntry> entries()
- Переопределяет:
-
entriesв классеZipFile - Возвращает:
- перечисление записей JAR-файла
- Исключения:
-
IllegalStateException— может быть выброшено, если JAR-файл закрыт
stream
public Stream<JarEntry> stream()
Stream записей JAR-файла. Записи представлены в Stream в том порядке, в котором они расположены в центральном каталоге JAR-файла.- Переопределяет:
-
streamв классеZipFile - Возвращает:
- упорядоченный
Streamзаписей этого JAR-файла - Исключения:
-
IllegalStateException— если JAR-файл закрыт - С версии:
- 1.8
versionedStream
public Stream<JarEntry> versionedStream()
Stream записей версионированного JAR-файла. Если этот JarFile является JAR-файлом с несколькими версиями и настроен для соответствующей обработки, то запись в потоке представляет собой последнюю версионированную запись, связанную с соответствующим именем базовой записи. Максимальная версия последней версионированной записи — это версия, возвращаемая методом getVersion(). Возвращаемый поток может содержать запись, существующую только как версионированная запись. Если JAR-файл не является JAR-файлом с несколькими версиями или JarFile не настроен для обработки JAR-файла с несколькими версиями, этот метод возвращает тот же поток, что и stream().
- Возвращает:
- поток версионированных записей
- Начиная с версии:
- 10
getInputStream
public InputStream getInputStream(ZipEntry ze) throws IOException
- Переопределяет:
-
getInputStreamв классеZipFile - Примечание API:
- Объект
InputStream, возвращаемый этим методом, может оборачиватьInflaterInputStream, методread(byte[], int, int)которого может изменять любой элемент выходного буфера. - Параметры:
-
ze— запись ZIP-файла - Возвращает:
- входной поток для чтения содержимого указанной записи ZIP-файла или null, если запись ZIP-файла отсутствует в JAR-файле
- Вызывает исключения:
-
ZipException— если произошла ошибка формата ZIP-файла -
IOException— если произошла ошибка ввода-вывода -
SecurityException— если какая-либо из записей JAR-файла имеет некорректную подпись. -
IllegalStateException— может быть вызвано, если JAR-файл был закрыт
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.