- 所有已实现的接口:
-
Closeable
,AutoCloseable
JarFile
类用于从可以使用java.io.RandomAccessFile
打开的任何文件中读取jar文件的内容。它扩展了带有读取可选Manifest
条目的支持以及处理多版本jar文件的支持的java.util.zip.ZipFile
类。 Manifest
可用于指定关于jar文件及其条目的元信息。
多版本jar文件是一个包含具有名为"Multi-Release"的主属性的清单的jar文件,其中包含一组"基本"条目,其中一些是具有公共或受保护方法的公共类,构成了jar文件的公共接口,并包含在"META-INF/versions"目录的子目录中的一组"版本化"条目。 版本化条目按Java平台的主版本进行分区。 版本化条目,版本为n
,8 < n
,在"META-INF/versions/{n}"目录中覆盖基本条目以及任何版本号为i
的条目,其中8 < i < n
。
默认情况下,用于多版本jar文件的JarFile
被配置为处理多版本jar文件,就好像它是一个普通(无版本)的jar文件,并且因此一个条目名称最多与一个基本条目关联。 可以通过使用带有JarFile(File, boolean, int, Runtime.Version)
构造函数创建JarFile
来配置JarFile
以处理多版本jar文件。 Runtime.Version
对象设置了在搜索版本化条目时使用的最大版本。 配置为这样时,一个条目名称可以对应于最多一个基本条目和零个或多个版本化条目。 需要搜索以将条目名称与其版本小于或等于最大版本的最新版本化条目关联(参见getEntry(String)
)。
使用JarFile
从JarFile
条目的内容中加载类的类加载器应通过调用将值Runtime.version()
分配给最后一个参数的JarFile(File, boolean, int, Runtime.Version)
构造函数来构造JarFile
。 这确保了与运行JVM的主版本兼容的类从多版本jar文件中加载。
如果在打开已签名的jar文件时打开了verify
标志,则jar条目的内容将根据与其路径名称
关联的清单中嵌入的签名进行验证。 对于多版本jar文件,版本化条目的内容将根据其自身的签名进行验证,并且JarEntry.getCodeSigners()
将返回其自己的签名者。 请注意,验证过程不包括验证签名者的证书。 调用者应检查JarEntry.getCodeSigners()
的返回值以进一步确定是否可以信任签名。
除非另有说明,在此类中将null
参数传递给构造函数或方法将导致抛出NullPointerException
。
- 实现注意:
-
如果API无法用于配置
JarFile
(例如,覆盖已编译应用程序或库的配置),则有两个System
属性可用。jdk.util.jar.version
可以分配一个值,该值是非负整数<= Runtime.version().feature()
的String
表示。 该值用于将有效运行时版本设置为与通过评估Runtime.version().feature()
获得的默认值不同的值。 有效运行时版本是JarFile(File, boolean, int, Runtime.Version)
构造函数在最后一个参数的值为JarFile.runtimeVersion()
时使用的版本。jdk.util.jar.enableMultiRelease
可以分配三个String
值之一:true,false或force。 值true,默认值,启用多版本jar文件处理。 值false禁用多版本jar处理,忽略多版本jar文件中存在的"Multi-Release"清单属性和版本化目录。 此外,如果存在,方法isMultiRelease()
返回false。 值force导致JarFile
在构造后初始化为运行时版本控制。 它实际上与此代码相同:(new JarFile(File, boolean, int, JarFile.runtimeVersion())
。
- 自:
- 1.2
- 参见:
-
Field Summary
Modifier and TypeFieldDescriptionstatic final int
中央目录(CEN)头部内部文件属性字段偏移量。static final int
中央目录(CEN)头部外部文件属性字段偏移量。static final int
中央目录(CEN)头部注释长度字段偏移量。static final int
中央目录(CEN)头部未压缩文件crc-32值字段偏移量。static final int
中央目录(CEN)头部磁盘号起始字段偏移量。static final int
中央目录(CEN)头部额外字段长度字段偏移量。static final int
中央目录(CEN)头部加密、解密标志字段偏移量。static final int
中央目录(CEN)头部字节大小(包括签名)。static final int
中央目录(CEN)头部压缩方法字段偏移量。static final int
中央目录(CEN)头部未压缩大小字段偏移量。static final int
中央目录(CEN)头部文件名长度字段偏移量。static final int
中央目录(CEN)头部LOC头部偏移量字段偏移量。static final long
中央目录(CEN)头部签名。static final int
中央目录(CEN)头部压缩大小字段偏移量。static final int
中央目录(CEN)头部修改时间字段偏移量。static final int
中央目录(CEN)头部创建者版本字段偏移量。static final int
中央目录(CEN)头部需要提取的版本字段偏移量。static final int
中央目录(END)头部zip文件注释长度字段偏移量。static final int
中央目录(END)头部字节大小(包括签名)。static final int
中央目录(END)头部第一个CEN头部字段偏移量。static final long
中央目录(END)头部签名。static final int
中央目录(END)头部字节大小字段偏移量。static final int
中央目录(END)头部此磁盘上的条目数字段偏移量。static final int
中央目录(END)头部总条目数字段偏移量。static final int
额外本地(EXT)头部未压缩文件crc-32值字段偏移量。static final int
额外本地(EXT)头部字节大小(包括签名)。static final int
额外本地(EXT)头部未压缩大小字段偏移量。static final long
额外本地(EXT)头部签名。static final int
额外本地(EXT)头部压缩大小字段偏移量。static final int
本地文件(LOC)头部未压缩文件crc-32值字段偏移量。static final int
本地文件(LOC)头部额外字段长度字段偏移量。static final int
本地文件(LOC)头部通用位标志字段偏移量。static final int
本地文件(LOC)头部字节大小(包括签名)。static final int
本地文件(LOC)头部压缩方法字段偏移量。static final int
本地文件(LOC)头部未压缩大小字段偏移量。static final int
本地文件(LOC)头部文件名长度字段偏移量。static final long
本地文件(LOC)头部签名。static final int
本地文件(LOC)头部压缩大小字段偏移量。static final int
本地文件(LOC)头部修改时间字段偏移量。static final int
本地文件(LOC)头部需要提取的版本字段偏移量。static final String
JAR清单文件名。Fields declared in class java.util.zip.ZipFile
OPEN_DELETE, OPEN_READ
-
Constructor Summary
ConstructorDescription创建一个新的JarFile
以从指定的File
对象中读取。创建一个新的JarFile
以从指定的File
对象中读取。创建一个新的JarFile
以从指定的File
对象中以指定模式读取。JarFile
(File file, boolean verify, int mode, Runtime.Version version) 创建一个新的JarFile
对象,以指定的模式从指定的File
对象中读取。创建一个新的JarFile
对象,以指定的文件name
中读取。创建一个新的JarFile
对象,以指定的文件name
中读取。 -
Method Summary
Modifier and TypeMethodDescriptionstatic Runtime.Version
返回表示多版本jar文件的未版本化配置的版本。entries()
返回jar文件条目的枚举。返回给定基本条目名称的ZipEntry
,如果未找到则返回null
。返回用于读取指定zip文件条目内容的输入流。getJarEntry
(String name) 返回给定基本条目名称的JarEntry
,如果未找到则返回null
。返回jar文件清单,如果没有则返回null
。final Runtime.Version
返回搜索版本化条目时使用的最大版本。final boolean
指示此jar文件是否为多版本jar文件。static Runtime.Version
返回表示多版本jar文件的有效运行时版本化配置的版本。stream()
返回jar文件条目的有序Stream
。返回版本化jar文件条目的Stream
。Methods declared in class java.util.zip.ZipFile
close, getComment, getName, size
-
Field Details
-
MANIFEST_NAME
JAR清单文件名称。- 参见:
-
LOCSIG
static final long LOCSIG本地文件(LOC)头签名。- 参见:
-
EXTSIG
static final long EXTSIG额外本地(EXT)头签名。- 参见:
-
CENSIG
static final long CENSIG中央目录(CEN)头签名。- 参见:
-
ENDSIG
static final long ENDSIG中央目录结束(END)头签名。- 参见:
-
LOCHDR
static final int LOCHDR本地文件(LOC)头大小(包括签名)。- 参见:
-
EXTHDR
static final int EXTHDR额外本地(EXT)头大小(包括签名)。- 参见:
-
CENHDR
static final int CENHDR中央目录(CEN)头大小(包括签名)。- 参见:
-
ENDHDR
static final int ENDHDR中央目录结束(END)头大小(包括签名)。- 参见:
-
LOCVER
static final int LOCVER本地文件(LOC)头版本需要提取字段偏移量。- 参见:
-
LOCFLG
static final int LOCFLG本地文件(LOC)头通用位标志字段偏移量。- 参见:
-
LOCHOW
static final int LOCHOW本地文件(LOC)头压缩方法字段偏移量。- 参见:
-
LOCTIM
static final int LOCTIM本地文件(LOC)头修改时间字段偏移量。- 参见:
-
LOCCRC
static final int LOCCRC本地文件(LOC)头未压缩文件crc-32值字段偏移量。- 参见:
-
LOCSIZ
static final int LOCSIZ本地文件(LOC)头压缩大小字段偏移量。- 参见:
-
LOCLEN
static final int LOCLEN本地文件(LOC)头未压缩大小字段偏移量。- 参见:
-
LOCNAM
static final int LOCNAM本地文件(LOC)头文件名长度字段偏移量。- 参见:
-
LOCEXT
static final int LOCEXT本地文件(LOC)头额外字段长度字段偏移量。- 参见:
-
EXTCRC
static final int EXTCRC额外本地(EXT)头未压缩文件crc-32值字段偏移量。- 参见:
-
EXTSIZ
static final int EXTSIZ额外本地(EXT)头压缩大小字段偏移量。- 参见:
-
EXTLEN
static final int EXTLEN额外本地(EXT)头未压缩大小字段偏移量。- 参见:
-
CENVEM
static final int CENVEM中央目录(CEN)头创建者版本字段偏移量。- 参见:
-
CENVER
static final int CENVER中央目录(CEN)头提取所需版本字段偏移量。- 参见:
-
CENFLG
static final int CENFLG中央目录(CEN)头加密、解密标志字段偏移量。- 参见:
-
CENHOW
static final int CENHOW中央目录(CEN)头压缩方法字段偏移量。- 参见:
-
CENTIM
static final int CENTIM中央目录(CEN)头修改时间字段偏移量。- 参见:
-
CENCRC
static final int CENCRC中央目录(CEN)头未压缩文件crc-32值字段偏移量。- 参见:
-
CENSIZ
static final int CENSIZ中央目录(CEN)头压缩大小字段偏移量。- 参见:
-
CENLEN
static final int CENLEN中央目录(CEN)头未压缩大小字段偏移量。- 参见:
-
CENNAM
static final int CENNAM中央目录(CEN)头文件名长度字段偏移量。- 参见:
-
CENEXT
static final int CENEXT中央目录(CEN)头额外字段长度字段偏移量。- 参见:
-
CENCOM
static final int CENCOM中央目录(CEN)头注释长度字段偏移量。- 参见:
-
CENDSK
static final int CENDSK中央目录(CEN)头磁盘起始编号字段偏移量。- 参见:
-
CENATT
static final int CENATT中央目录(CEN)头内部文件属性字段偏移量。- 参见:
-
CENATX
static final int CENATX中央目录(CEN)头外部文件属性字段偏移量。- 参见:
-
CENOFF
static final int CENOFF中央目录(CEN)头部LOC头部偏移字段偏移量。- 参见:
-
ENDSUB
static final int ENDSUB中央目录结束(END)头部此磁盘上的条目数字段偏移量。- 参见:
-
ENDTOT
static final int ENDTOT中央目录结束(END)头部总条目数字段偏移量。- 参见:
-
ENDSIZ
static final int ENDSIZ中央目录结束(END)头部中央目录大小(以字节为单位)字段偏移量。- 参见:
-
ENDOFF
static final int ENDOFF中央目录结束(END)头部第一个CEN头部的偏移量字段偏移量。- 参见:
-
ENDCOM
static final int ENDCOM中央目录结束(END)头部zip文件注释长度字段偏移量。- 参见:
-
-
Constructor Details
-
JarFile
创建一个新的JarFile
以从指定文件name
读取。如果已签名,则将验证JarFile
。- 参数:
-
name
- 要打开以进行读取的jar文件的名称 - 抛出:
-
IOException
- 如果发生I/O错误 -
SecurityException
- 如果安全管理器拒绝访问文件
-
JarFile
创建一个新的JarFile
以从指定文件name
读取。- 参数:
-
name
- 要打开以进行读取的jar文件的名称 -
verify
- 是否验证已签名的jar文件。 - 抛出:
-
IOException
- 如果发生I/O错误 -
SecurityException
- 如果安全管理器拒绝访问文件
-
JarFile
创建一个新的JarFile
以从指定的File
对象读取。如果已签名,则将验证JarFile
。- 参数:
-
file
- 要打开以进行读取的jar文件 - 抛出:
-
IOException
- 如果发生I/O错误 -
SecurityException
- 如果安全管理器拒绝访问文件
-
JarFile
创建一个新的JarFile
以从指定的File
对象读取。- 参数:
-
file
- 要打开以进行读取的jar文件 -
verify
- 是否验证已签名的jar文件。 - 抛出:
-
IOException
- 如果发生I/O错误 -
SecurityException
- 如果安全管理器拒绝访问文件
-
JarFile
创建一个新的JarFile
以从指定的File
对象以指定模式读取。模式参数必须是OPEN_READ
或OPEN_READ | OPEN_DELETE
之一。- 参数:
-
file
- 要打开以进行读取的jar文件 -
verify
- 是否验证已签名的jar文件。 -
mode
- 要打开文件的模式 - 抛出:
-
IOException
- 如果发生I/O错误 -
IllegalArgumentException
- 如果mode
参数无效 -
SecurityException
- 如果安全管理器拒绝访问文件 - 自:
- 1.3
-
JarFile
创建一个新的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
- 如果发生I/O错误 -
IllegalArgumentException
- 如果mode
参数无效 -
SecurityException
- 如果安全管理器拒绝访问文件 -
NullPointerException
- 如果version
为null
- 自:
- 9
-
-
Method Details
-
baseVersion
返回表示多版本jar文件的无版本配置的版本。- 返回:
- 表示无版本配置的版本
- 自:
- 9
-
runtimeVersion
返回表示多版本jar文件的有效运行时版本化配置的版本。默认情况下,返回的
Version
的特性版本号将等于Runtime.version()
的特性版本号。但是,如果设置了jdk.util.jar.version
属性,则返回的Version
将从该属性派生,并且特性版本号可能不相等。- 返回:
- 表示运行时版本化配置的版本
- 自:
- 9
-
getVersion
返回搜索版本化条目时使用的最大版本。如果此
JarFile
不是多版本jar文件或未配置为处理此类文件,则返回的版本将与从baseVersion()
返回的版本相同。- 返回:
- 最大版本
- 自:
- 9
-
isMultiRelease
public final boolean isMultiRelease()指示此jar文件是否为多版本jar文件。- 返回:
- 如果此JarFile是多版本jar文件,则为true
- 自:
- 9
-
getManifest
返回jar文件清单,如果没有则返回null
。- 返回:
-
jar文件清单,如果没有则返回
null
- 抛出:
-
IllegalStateException
- 如果jar文件已关闭可能会抛出 -
IOException
- 如果发生I/O错误
-
getJarEntry
返回给定基本条目名称的JarEntry
,如果未找到则返回null
。如果此
JarFile
是多版本jar文件并已配置为处理此类文件,则将执行搜索以查找并返回与给定条目名称关联的最新版本条目的JarEntry
。返回的JarEntry
是与给定基本条目名称关联的版本化条目,该条目以字符串"META-INF/versions/{n}/"
为前缀,其中n
的最大值为存在条目的值。如果不存在这样的版本化条目,则返回基本条目的JarEntry
,否则如果未找到任何条目,则返回null
。版本n
的初始值是由方法getVersion()
返回的最大版本。- 实现要求:
-
此实现调用
getEntry(String)
。 - 参数:
-
name
- jar文件条目名称 - 返回:
-
给定条目名称的
JarEntry
,或版本化条目名称,如果未找到则返回null
- 抛出:
-
IllegalStateException
- 如果jar文件已关闭可能会抛出 - 参见:
-
getEntry
返回给定基本条目名称的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
返回jar文件条目的枚举。- 覆盖:
-
entries
在类ZipFile
中 - 返回:
- jar文件条目的枚举
- 抛出:
-
IllegalStateException
- 如果jar文件已关闭可能会抛出
-
stream
返回jar文件条目的有序Stream
。条目在Stream
中按照它们在jar文件的中央目录中出现的顺序出现。- 覆盖:
-
stream
在类ZipFile
中 - 返回:
-
在此jar文件中条目的有序
Stream
- 抛出:
-
IllegalStateException
- 如果jar文件已关闭可能会抛出 - 自:
- 1.8
-
versionedStream
返回版本化jar文件条目的Stream
。如果这个
JarFile
是一个多版本jar文件,并且已配置为按此方式处理,则流中的条目是与相应基本条目名称关联的最新版本化条目。最新版本化条目的最大版本是由getVersion()
返回的版本。返回的流可能包括仅存在作为版本化条目的条目。如果jar文件不是多版本jar文件或者JarFile
未配置为处理多版本jar文件,则此方法返回与stream()
返回的相同流。- 返回:
- 版本化条目的流
- 自:
- 10
-
getInputStream
返回用于读取指定zip文件条目内容的输入流。- 覆盖:
-
getInputStream
在类ZipFile
中 - API注释:
-
此方法返回的
InputStream
可以包装一个InflaterInputStream
,其read(byte[], int, int)
方法可以修改输出缓冲区的任何元素。 - 参数:
-
ze
- zip文件条目 - 返回:
-
用于读取指定zip文件条目内容的输入流,如果zip文件条目不存在于jar文件中则返回
null
- 抛出:
-
ZipException
- 如果发生zip文件格式错误 -
IOException
- 如果发生I/O错误 -
SecurityException
- 如果任何jar文件条目签名不正确 -
IllegalStateException
- 如果jar文件已关闭可能会抛出
-