Класс 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может быть присвоено значение, являющееся строковым представлением неотрицательного целого числа<= 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<JarEntry> |
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<JarEntry> |
stream() |
Возвращает упорядоченный Stream по записям файла jar. |
Stream<JarEntry> |
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
- См. также:
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- если произошла ошибка ввода-вывода -
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.- Параметры:
-
file- jar-файл, который нужно открыть для чтения -
verify- требуется ли проверка jar-файла на подпись. -
mode- режим открытия файла - Исключения:
-
IOException- если произошла ошибка ввода-вывода -
mode- если аргументmodeневерный -
SecurityException- если доступ к файлу запрещен SecurityManager - С тех пор:
- 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- если произошла ошибка ввода-вывода -
mode- если аргументmodeневерный -
SecurityException- если доступ к файлу запрещен SecurityManager -
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 - Параметры:
-
ze- запись zip-файла - Возвращает:
- поток ввода для чтения содержимого указанной записи zip-файла
- Исключения:
-
ZipException- если произошла ошибка в формате zip-файла -
IOException- если произошла ошибка ввода-вывода -
SecurityException- если какая-либо из записей JAR-файла неправильно подписана. -
IllegalStateException- может быть выброшено, если JAR-файл закрыт
© 1993, 2021, 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/17/docs/api/java.base/java/util/jar/JarFile.html