- java.lang.Object
-
- java.util.zip.ZipFile
-
- java.util.jar.JarFile
-
- 实现的所有接口
-
Closeable
,AutoCloseable
public class JarFile extends ZipFile
JarFile
类用于从任何可以使用java.io.RandomAccessFile
打开的文件中读取jar文件的内容。 它扩展了类java.util.zip.ZipFile
,支持读取可选的Manifest
条目,并支持处理多版本jar文件。Manifest
可用于指定有关jar文件及其条目的元信息。A multi-release jar file是一个jar文件,其中包含一个名为“Multi-Release”的主要属性的清单,一组“基本”条目,其中一些是具有公共或受保护方法的公共类,包含jar文件的公共接口,以及“META-INF / versions”目录的子目录中包含的一组“版本化”条目。 版本化条目由Java平台的主要版本分区。 甲版本条目,具有版本
n
,8 < n
,在“META-INF /版本/ {N}”目录重写基条目以及与一个版本号中的任何条目i
其中8 < i < n
。默认情况下,多版本jar文件的
JarFile
被配置为处理多版本jar文件,就像它是一个普通(无版本)jar文件一样,并且因此条目名称最多与一个基本条目相关联。JarFile
可以配置为通过使用JarFile(File, boolean, int, Runtime.Version)
构造函数创建JarFile
来处理多版本jar文件。Runtime.Version
对象设置搜索版本化条目时使用的最大版本。 如此配置,条目名称可以与最多一个基本条目和零个或多个版本化条目相对应。 需要搜索以将条目名称与版本小于或等于最大版本的最新版本条目相关联(请参阅getEntry(String)
)。利用类装载器
JarFile
从内容加载类JarFile
条目应构建JarFile
通过调用JarFile(File, boolean, int, Runtime.Version)
与值构造Runtime.version()
分配给最后一个参数。 这确保了从多版本jar文件加载与正在运行的JVM的主要版本兼容的类。如果在打开已签名的jar文件时打开了
verify
标志,则会根据与其path name
关联的清单中嵌入的签名验证jar条目的内容。 对于多版本jar文件,版本化条目的内容是针对其自己的签名的verfieid ,JarEntry.getCodeSigners()
返回其自己的签名者。 请注意,验证过程不包括验证签名者的证书。 调用者应检查JarEntry.getCodeSigners()
的返回值,以进一步确定签名是否可信任。除非另有说明,否则将
null
参数传递给null
中的构造函数或方法将导致抛出NullPointerException
。- Implementation Note:
-
如果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处理,忽略“多版本”清单属性,以及多版本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()
返回表示多版本jar文件的有效运行时版本化配置的版本。Stream<JarEntry>
stream()
返回jar文件条目的有序Stream
。Stream<JarEntry>
versionedStream()
返回版本化的jar文件条目的Stream
。
-
-
-
字段详细信息
-
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
将验证JarFile
。- 参数
-
name
- 要打开以供阅读的jar文件的名称 - 异常
-
IOException
- 如果发生I / O错误 -
SecurityException
- 如果SecurityManager拒绝访问该文件
-
JarFile
public JarFile(String name, boolean verify) throws IOException
创建一个新的JarFile
以从指定的文件name
。- 参数
-
name
- 要打开以供阅读的jar文件的名称 -
verify
- 是否验证jar文件是否已签名。 - 异常
-
IOException
- 如果发生I / O错误 -
SecurityException
- 如果SecurityManager拒绝访问该文件
-
JarFile
public JarFile(File file) throws IOException
创建一个新的JarFile
以从指定的File
对象中读取。 如果已签署,将验证JarFile
。- 参数
-
file
- 要打开以供阅读的jar文件 - 异常
-
IOException
- 如果发生I / O错误 -
SecurityException
- 如果SecurityManager拒绝访问该文件
-
JarFile
public JarFile(File file, boolean verify) throws IOException
创建一个新的JarFile
以从指定的File
对象中读取。- 参数
-
file
- 要打开以供阅读的jar文件 -
verify
- 是否验证jar文件是否已签名。 - 异常
-
IOException
- 如果发生I / O错误 -
SecurityException
- 如果SecurityManager拒绝访问该文件。
-
JarFile
public JarFile(File file, boolean verify, int mode) throws IOException
创建新的JarFile
以在指定模式下从指定的File
对象读取。 mode参数必须是OPEN_READ
或OPEN_READ | OPEN_DELETE
。- 参数
-
file
- 要打开以供阅读的jar文件 -
verify
- 是否验证jar文件是否已签名。 -
mode
- 要打开文件的模式 - 异常
-
IOException
- 如果发生I / O错误 -
IllegalArgumentException
- 如果mode
参数无效 -
SecurityException
- 如果SecurityManager拒绝访问该文件 - 从以下版本开始:
- 1.3
-
JarFile
public JarFile(File file, boolean verify, int mode, Runtime.Version version) throws IOException
创建一个新的JarFile
以在指定模式下从指定的File
对象读取。 mode参数必须是OPEN_READ
或OPEN_READ | OPEN_DELETE
。 转换为规范形式后,version参数用于配置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
- 如果SecurityManager拒绝访问该文件 -
NullPointerException
- 如果version
是null
- 从以下版本开始:
- 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文件。- 结果
- 如果此JarFile是多版本jar文件,则为true
- 从以下版本开始:
- 9
-
getManifest
public Manifest getManifest() throws IOException
返回jar文件清单,如果没有,则返回null
。- 结果
-
jar文件清单,如果没有,
null
- 异常
-
IllegalStateException
- 如果jar文件已关闭,则可能抛出此异常 -
IOException
- 如果发生I / O错误
-
getJarEntry
public JarEntry getJarEntry(String name)
返回JarEntry
用于给定基本条目名称null
如果没有找到。如果此
JarFile
是多版本jar文件并且配置为如此处理,则执行搜索以查找并返回JarEntry
,该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
是与给定条目名称关联的最新版本化条目。 返回的ZipEntry
是对应于给定基本条目名称的版本化条目,前缀为字符串"META-INF/versions/{n}/"
,其中存在条目的n
。 如果此类版本化条目不存在,则返回基本条目的ZipEntry
,否则如果未找到任何条目,则返回null
。 版本n
的初始值是方法getVersion()
返回的最大版本。- 重写:
-
getEntry
类ZipFile
- 实现要求:
-
即使没有相应的基本条目,此实现也可以返回所请求名称的版本化条目。 如果存在匹配的私有或包私有版本条目,则会发生这种情况。 如果子类重写此方法,请确保override方法调用
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()
返回jar文件条目的有序Stream
。 条目按照它们出现在jar文件的中心目录中的顺序显示在Stream
中。- 重写:
-
stream
在类ZipFile
- 结果
-
这个jar文件中有条目的
Stream
条 - 异常
-
IllegalStateException
- 如果jar文件已关闭 - 从以下版本开始:
- 1.8
-
versionedStream
public Stream<JarEntry> versionedStream()
返回版本化的jar文件条目的Stream
。如果此
JarFile
是多版本jar文件并且配置为JarFile
处理,则流中的条目是与相应基本条目名称关联的最新版本化条目。 最新版本条目的最大版本是getVersion()
返回的版本。 返回的流可以包括仅作为版本化条目存在的条目。 如果jar文件不是多版本jar文件或JarFile
未配置为处理多版本jar文件,则此方法返回stream()
返回的相同流。- 结果
- 版本化条目流
- 从以下版本开始:
- 10
-
getInputStream
public InputStream getInputStream(ZipEntry ze) throws IOException
返回用于读取指定zip文件条目内容的输入流。- 重写:
-
getInputStream
在课堂上ZipFile
- 参数
-
ze
- zip文件条目 - 结果
- 用于读取指定zip文件条目内容的输入流
- 异常
-
ZipException
- 如果发生zip文件格式错误 -
IOException
- 如果发生I / O错误 -
SecurityException
- 如果任何jar文件条目未正确签名。 -
IllegalStateException
- 如果jar文件已关闭,则可能抛出此异常
-
-