Класс JarFile
- Все реализованные интерфейсы:
-
Closeable,AutoCloseable
public class JarFile extends ZipFile
JarFile используется для чтения содержимого файла jar из любого файла, который может быть открыт с помощью java.io.RandomAccessFile. Он расширяет класс java.util.zip.ZipFile с поддержкой чтения необязательной записи Manifest, и поддержкой обработки файлов jar с несколькими версиями. Объект Manifest может использоваться для указания метаданных о файле jar и его записях. Файл jar с несколькими версиями — это файл jar, который содержит манифест с главным атрибутом, названным «Многоверсионный», набор «базовых» записей, некоторые из которых являются общедоступными классами с общедоступными или защищёнными методами, составляющими общедоступный интерфейс файла jar, и набор «версионированных» записей, содержащихся в подкаталогах каталога «META-INF/versions». Версионированные записи разделяются по основной версии платформы Java. Версионированная запись с версией n, 8 < n, в каталоге «META-INF/versions/{n}» переопределяет базовые записи, а также любые записи с номером версии i, где 8 < i < n.
По умолчанию, для файла jar с несколькими версиями 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(), присвоенным последнему аргументу. Это гарантирует, что классы, совместимые с основной версией работающей 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можно присвоить одно из трёх значенийString: true, 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() |
Возвращает версию, представляющую эффективную версионированную конфигурацию файла JAR с несколькими выпусками. |
Stream |
stream() |
Возвращает упорядоченный Stream по записям файла JAR. |
Stream |
versionedStream() |
Возвращает Stream версионированных записей файла JAR. |
Методы, объявленные в классе java.util.zip.ZipFile
close, getComment, getName, size
Подробное описание полей
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
- См. также:
Сдвиг смещения поля нескомпрессированного размера заголовка центрального каталога (CEN)
static final int CENLEN
- См. также:
Сдвиг смещения поля длины имени файла заголовка центрального каталога (CEN)
static final int CENNAM
- См. также:
Сдвиг смещения поля длины дополнительного поля заголовка центрального каталога (CEN)
static final int CENEXT
- См. также:
Сдвиг смещения поля длины комментария заголовка центрального каталога (CEN)
static final int CENCOM
- См. также:
Сдвиг смещения поля номера диска начала заголовка центрального каталога (CEN)
static final int CENDSK
- См. также:
Сдвиг смещения поля атрибутов внутреннего файла заголовка центрального каталога (CEN)
static final int CENATT
- См. также:
Сдвиг смещения поля атрибутов внешнего файла заголовка центрального каталога (CEN)
static final int CENATX
- См. также:
Смещение заголовка CEN
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- если произошла ошибка ввода-вывода -
SecurityException- если доступ к файлу запрещён SecurityManager
JarFile
public JarFile(String name, boolean verify) throws IOException
JarFile для чтения из указанного файла name.- Параметры:
-
name- имя jar-файла, который нужно открыть для чтения -
verify- нужно ли проверять jar-файл на подпись. - Исключения:
-
IOException- если произошла ошибка ввода-вывода -
SecurityException- если доступ к файлу запрещён SecurityManager
JarFile
public JarFile(File file) throws IOException
JarFile для чтения из указанного объекта File. JarFile будет проверена, если она подписана.- Параметры:
-
file- jar-файл, который нужно открыть для чтения - Исключения:
-
IOException- если произошла ошибка ввода-вывода -
SecurityException- если доступ к файлу запрещён SecurityManager
JarFile
public JarFile(File file, boolean verify) throws IOException
JarFile для чтения из указанного объекта File.- Параметры:
-
file- jar-файл, который нужно открыть для чтения -
verify- нужно ли проверять jar-файл на подпись. - Исключения:
-
IOException- если произошла ошибка ввода-вывода -
SecurityException- если доступ к файлу запрещён SecurityManager.
JarFile
public JarFile(File file, boolean verify, int mode) throws IOException
JarFile для чтения из указанного объекта File в указанном режиме. Аргумент режима должен быть либо OPEN_READ, либо OPEN_READ | OPEN_DELETE. - Parameters:
-
file- jar-файл, который нужно открыть для чтения -
verify- нужно ли проверять jar-файл на подпись, если он подписан -
mode- режим открытия файла - Throws:
-
IOException- если произошла ошибка ввода-вывода -
IllegalArgumentException- если аргументmodeнекорректен -
SecurityException- если доступ к файлу запрещён SecurityManager - Since:
- 1.3
JarFile
public JarFile(File file, boolean verify, int mode, Runtime.Version version) throws IOException
JarFile для чтения из указанного объекта File в указанном режиме. Аргумент режима должен быть либо OPEN_READ, либо OPEN_READ | OPEN_DELETE. Аргумент version, после преобразования в каноническую форму, используется для настройки JarFile для обработки jar-файлов с несколькими версиями. Каноническая форма, полученная из параметра version, имеет вид Runtime.Version.parse(Integer.toString(n)), где n равно Math.max(version.feature(), JarFile.baseVersion().feature()).
- Parameters:
-
file- jar-файл, который нужно открыть для чтения -
verify- нужно ли проверять jar-файл на подпись, если он подписан -
mode- режим открытия файла -
version- указывает версию релиза для jar-файла с несколькими версиями - Throws:
-
IOException- если произошла ошибка ввода-вывода -
IllegalArgumentException- если аргументmodeнекорректен -
SecurityException- если доступ к файлу запрещён SecurityManager -
NullPointerException- еслиversionравноnull - Since:
- 9
Подробное описание методов
baseVersion
public static Runtime.Version baseVersion()
- Returns:
- версия, представляющая неверсионированную конфигурацию
- Since:
- 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().
- Overrides:
-
getEntryв классеZipFile - Implementation Requirements:
- Эта реализация может вернуть запись с версией для запрошенного имени, даже если соответствующая базовая запись отсутствует. Это может произойти, если есть приватная или пакетная запись с версией, которая совпадает. Если подкласс переопределяет этот метод, убедитесь, что переопределенный метод вызывает
super.getEntry(name)для получения всех записей с версией. - Parameters:
-
name- имя записи в архиве JAR - Returns:
ZipEntryдля данного имени записи или имя записи с версией илиnull, если не найдено- Throws:
-
IllegalStateException- может быть выброшено, если архив JAR был закрыт - See Also:
entries
public Enumeration<JarEntry> entries()
- Overrides:
-
entriesв классеZipFile - Returns:
- перечисление записей в архиве JAR
- Throws:
-
IllegalStateException- может быть выброшено, если архив JAR был закрыт
stream
public Stream<JarEntry> stream()
Stream по записям файла jar. Записи появляются в Stream в том порядке, в котором они находятся в центральном каталоге файла jar.- Overrides:
-
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
- Overrides:
-
getInputStreamв классеZipFile - Примечание API:
- Возвращаемый
InputStreamэтим методом может оборачиватьInflaterInputStream, методread(byte[], int, int)которого может изменить любой элемент выходного буфера. - Параметры:
-
ze- запись файла zip - Возвращает:
- поток ввода для чтения содержимого указанной записи файла zip или null, если запись файла zip не существует в файле jar
- Использует:
-
ZipException- если произошла ошибка формата файла zip -
IOException- если произошла ошибка ввода-вывода -
SecurityException- если какая-либо из записей файла jar неправильно подписана. -
IllegalStateException- может быть выброшено, если файл jar закрыт
© 1993, 2023, 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://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/util/jar/JarFile.html