Класс JarFile
- java.lang.Object
-
- java.util.zip.ZipFile
-
- java.util.jar.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
- См. также:
-
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 file,
boolean verify) | Создает новый |
JarFile(File file,
boolean verify,
int mode) | Создает новый |
JarFile(File file,
boolean verify,
int mode,
Runtime.Version version) | Создает новый |
JarFile(String name) | Создает новый |
JarFile(String name,
boolean verify) | Создает новый |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
static Runtime.Version | baseVersion() | Возвращает версию, представляющую неверсионированную конфигурацию файла jar с несколькими выпусками. |
Enumeration<JarEntry> | entries() | Возвращает перечисление записей файла jar. |
ZipEntry | getEntry(String name) | Возвращает |
InputStream | getInputStream(ZipEntry ze) | Возвращает поток ввода для чтения содержимого указанной записи файла zip. |
JarEntry | getJarEntry(String name) | Возвращает |
Manifest | getManifest() | Возвращает манифест файла jar или |
Runtime.Version | getVersion() | Возвращает максимальную версию, используемую при поиске версионированных записей. |
boolean | isMultiRelease() | Указывает, является ли этот файл jar файлом jar с несколькими выпусками. |
static Runtime.Version | runtimeVersion() | Возвращает версию, представляющую эффективную версионированную конфигурацию runtime файла jar с несколькими выпусками. |
Stream<JarEntry> | stream() | Возвращает упорядоченный |
Stream<JarEntry> | versionedStream() | Возвращает |
Методы, объявленные в классе 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