Класс 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 с несколькими версиями так, как будто это обычный (неверсионный) файл 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(), присвоенным последнему аргументу. Это гарантирует, что классы, совместимые с основной версией работающей JVM, загружаются из файлов JAR с несколькими версиями.
Если флаг verify включен при открытии подписанного файла JAR, содержимое записи файла 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может быть присвоено одно из трёх значенийStringtrue, false или force. Значение true, значение по умолчанию, включает обработку файлов JAR с несколькими версиями. Значение false отключает обработку файлов JAR с несколькими версиями, игнорируя атрибут "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 |
Смещение в поле смещения первого заголовка CEN в заголовке конца центрального каталога (END). |
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-манифеста. |
Поля, объявленные в классе java.util.zip.ZipFile
OPEN_DELETE, OPEN_READ
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
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 файлом JAR с несколькими выпусками. |
static Runtime.Version |
runtimeVersion() |
Возвращает версию, представляющую эффективную версионированную конфигурацию runtime файла JAR с несколькими выпусками. |
Stream |
stream() |
Возвращает упорядоченный Stream по записям файла JAR. |
Stream |
versionedStream() |
Возвращает Stream версионированных записей файла JAR. |
Подробное описание полей
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 выводится из этого свойства, и номера версий функциональности могут не совпадать.
- Возвращает:
- версию, представляющую конфигурацию runtime с версификацией
- С момента:
- 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.
https://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/jar/JarFile.html