Класс 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 может быть присвоено одно из трех значений String true, false или force. Значение true, значение по умолчанию, включает обработку файлов jar с несколькими выпусками. Значение false отключает обработку файлов jar с несколькими выпусками, игнорируя атрибут манифеста «Multi-Release» и каталоги версий в файле jar с несколькими выпусками, если они существуют. Кроме того, метод isMultiRelease() возвращает false. Значение force приводит к инициализации JarFile к версионированию времени выполнения после создания. Это фактически выполняет то же самое, что и этот код: (new JarFile(File, boolean, int, JarFile.runtimeVersion()).

С:
1.2
См. также:
Manifest, ZipFile, JarEntry

Поля

Модификатор и тип Поле Описание
static int CENATT
static int CENATX
static int CENCOM
static int CENCRC
static int CENDSK
static int CENEXT
static int CENFLG
static int CENHDR
static int CENHOW
static int CENLEN
static int CENNAM
static int CENOFF
static long CENSIG
static int CENSIZ
static int CENTIM
static int CENVEM
static int CENVER
static int ENDCOM
static int ENDHDR
static int ENDOFF
static long ENDSIG
static int ENDSIZ
static int ENDSUB
static int ENDTOT
static int EXTCRC
static int EXTHDR
static int EXTLEN
static long EXTSIG
static int EXTSIZ
static int LOCCRC
static int LOCEXT
static int LOCFLG
static int LOCHDR
static int LOCHOW
static int LOCLEN
static int LOCNAM
static long LOCSIG
static int LOCSIZ
static int LOCTIM
static int LOCVER
static String MANIFEST_NAME

Имя файла манифеста JAR.

Поля, объявленные в классе java.util.zip.ZipFile

OPEN_DELETE, OPEN_READ

Конструкторы

Конструктор Описание
JarFile​(File file)

Создает новый JarFile для чтения из указанного объекта File.

JarFile​(File file, boolean verify)

Создает новый JarFile для чтения из указанного объекта File.

JarFile​(File file, boolean verify, int mode)

Создает новый JarFile для чтения из указанного объекта File в указанном режиме.

JarFile​(File file, boolean verify, int mode, Runtime.Version version)

Создает новый JarFile для чтения из указанного объекта File в указанном режиме.

JarFile​(String name)

Создает новый JarFile для чтения из указанного файла name.

JarFile​(String name, boolean verify)

Создает новый JarFile для чтения из указанного файла name.

Методы

Модификатор и тип Метод Описание
static Runtime.Version baseVersion()

Возвращает версию, представляющую неверсионированную конфигурацию файла jar с несколькими выпусками.

Enumeration<JarEntry> entries()

Возвращает перечисление записей файла jar.

ZipEntry getEntry​(String name)

Возвращает ZipEntry для данного имени базовой записи или null, если не найдено.

InputStream getInputStream​(ZipEntry ze)

Возвращает поток ввода для чтения содержимого указанной записи файла zip.

JarEntry getJarEntry​(String name)

Возвращает JarEntry для данного имени базовой записи или null, если не найдено.

Manifest getManifest()

Возвращает манифест файла jar или null, если он отсутствует.

Runtime.Version getVersion()

Возвращает максимальную версию, используемую при поиске версионированных записей.

boolean isMultiRelease()

Указывает, является ли этот файл jar файлом jar с несколькими выпусками.

static Runtime.Version runtimeVersion()

Возвращает версию, представляющую эффективную версионированную конфигурацию runtime файла jar с несколькими выпусками.

Stream<JarEntry> stream()

Возвращает упорядоченный Stream по записям файла jar.

Stream<JarEntry> versionedStream()

Возвращает Stream версионированных записей файла jar.

Методы, объявленные в классе java.util.zip.ZipFile

close, finalize, getComment, getName, size

Методы, объявленные в классе java.lang.Object

clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Поля

MANIFEST_NAME

public static final String MANIFEST_NAME

Имя файла манифеста JAR.

См. также:
Значения константных полей

LOCSIG

public static final long LOCSIG
См. также:
Значения константных полей

EXTSIG

public static final long EXTSIG
См. также:
Значения константных полей

CENSIG

public static final long CENSIG
См. также:
Значения константных полей

ENDSIG

public static final long ENDSIG
См. также:
Значения константных полей

LOCHDR

public static final int LOCHDR
См. также:
Значения константных полей

EXTHDR

public static final int EXTHDR
См. также:
Значения константных полей

CENHDR

public static final int CENHDR
См. также:
Значения константных полей

ENDHDR

public static final int ENDHDR
См. также:
Значения константных полей

LOCVER

public static final int LOCVER
См. также:
Значения константных полей

LOCFLG

public static final int LOCFLG
См. также:
Значения константных полей

LOCHOW

public static final int LOCHOW
См. также:
Значения константных полей

LOCTIM

public static final int LOCTIM
См. также:
Значения константных полей

LOCCRC

public static final int LOCCRC
См. также:
Значения константных полей

LOCSIZ

public static final int LOCSIZ
См. также:
Значения константных полей

LOCLEN

public static final int LOCLEN
См. также:
Значения константных полей

LOCNAM

public static final int LOCNAM
См. также:
Значения константных полей

LOCEXT

public static final int LOCEXT
См. также:
Значения константных полей

EXTCRC

public static final int EXTCRC
См. также:
Значения константных полей

EXTSIZ

public static final int EXTSIZ
См. также:
Значения константных полей

EXTLEN

public static final int EXTLEN
См. также:
Значения константных полей

CENVEM

public static final int CENVEM
См. также:
Значения константных полей

CENVER

public static final int CENVER
См. также:
Значения константных полей

CENFLG

public static final int CENFLG
См. также:
Значения константных полей

CENHOW

public static final int CENHOW
См. также:
Значения константных полей

CENTIM

public static final int CENTIM
См. также:
Значения константных полей

CENCRC

public static final int CENCRC
См. также:
Значения константных полей

CENSIZ

public static final int CENSIZ
См. также:
Значения константных полей

CENLEN

public static final int CENLEN
См. также:
Значения константных полей

CENNAM

public static final int CENNAM
См. также:
Значения константных полей

CENEXT

public static final int CENEXT
См. также:
Значения константных полей

CENCOM

public static final int CENCOM
См. также:
Значения константных полей

CENDSK

public static final int CENDSK
См. также:
Значения константных полей

CENATT

public static final int CENATT
См. также:
Значения константных полей

CENATX

public static final int CENATX
См. также:
Значения константных полей

CENOFF

public static final int CENOFF
См. также:
Значения константных полей

ENDSUB

public static final int ENDSUB
См. также:
Значения константных полей

ENDTOT

public static final int ENDTOT
См. также:
Значения константных полей

ENDSIZ

public static final int ENDSIZ
См. также:
Значения константных полей

ENDOFF

public static final int ENDOFF
См. также:
Значения константных полей

ENDCOM

public 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
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 . Аргумент версии, после преобразования в каноническую форму, используется для настройки 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
Since:
9

Методы

baseVersion

public static Runtime.Version baseVersion()

Возвращает версию, представляющую неверсифицированную конфигурацию файла jar с несколькими выпусками.

Возвращает:
версия, представляющая неверсифицированную конфигурацию
С:
9

runtimeVersion

public static Runtime.Version runtimeVersion()

Возвращает версию, представляющую эффективную конфигурацию с версией выполнения файла jar с несколькими выпусками.

По умолчанию номер версии функции возвращаемого Version будет равен номеру версии функции Runtime.version(). Однако, если свойство jdk.util.jar.version установлено, возвращаемое значение Version выводится из этого свойства, и номера версий функций могут не совпадать.

Возвращает:
версия, представляющая конфигурацию с версией выполнения
С:
9

getVersion

public final Runtime.Version getVersion()

Возвращает максимальную версию, используемую при поиске версифицированных записей.

Если этот JarFile не является файлом jar с несколькими выпусками или не настроен для обработки как таковой, возвращаемая версия будет такой же, как и возвращаемая методом baseVersion().

Возвращает:
максимальная версия
С:
9

isMultiRelease

public final boolean isMultiRelease()

Указывает, является ли этот файл jar файлом jar с несколькими выпусками.

Возвращает:
true, если этот JarFile является файлом jar с несколькими выпусками
С:
9

getManifest

public Manifest getManifest()
                     throws IOException

Возвращает манифест файла jar или 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 был закрыт
См. также:
JarEntry

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 был закрыт
См. также:
ZipEntry

entries

public Enumeration<JarEntry> entries()

Возвращает перечисление записей файла jar.

Переопределяет:
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

Возвращает поток ввода для чтения содержимого указанной записи файла zip.

Переопределяет:
getInputStream в классе ZipFile
Параметры:
ze - запись файла zip
Возвращает:
поток ввода для чтения содержимого указанной записи файла zip
Выбрасывает:
ZipException - если произошла ошибка формата zip-файла
IOException - если произошла ошибка ввода-вывода
SecurityException - если любая из записей файла jar неправильно подписана.
IllegalStateException - может быть выброшен, если файл jar был закрыт

© 1993, 2020, 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/11/docs/api/java.base/java/util/jar/JarFile.html

Spec-Zone .ru
спецификации, руководства, описания, API