- java.lang.Object
-
- java.util.zip.ZipFile
-
- java.util.jar.JarFile
-
- All Implemented Interfaces:
-
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()分配给最后一个参数。 这确保与主要版本的运行JVM兼容的类从多版本jar文件加载。如果打开签名的jar文件时验证标志已打开,则文件的内容将根据嵌入文件中的签名进行验证。 请注意,验证过程不包括验证签名者的证书。 来电者应检查
JarEntry.getCodeSigners()的返回值,以进一步确定签名是否可信。除非另有说明,否则将
null参数传递给null中的构造函数或方法将导致抛出NullPointerException。- Implementation Note:
-
如果API不能用于配置
JarFile(例如,覆盖已编译应用程序或库的配置),则可以使用两个System属性。-
jdk.util.jar.version可以分配一个值,即String表示的非负整数<= Runtime.version().major()。 该值用于将有效的运行时版本设置为通过评估Runtime.version().major()获得的默认值以外的值。 当最后一个参数的值为JarFile.runtimeVersion()时,有效的运行时版本是JarFile(File, boolean, int, Runtime.Version)构造函数使用的版本。 -
jdk.util.jar.enableMultiRelease可分配三者之一String值真 , 假 ,或力 。 值true ,默认值,启用多版本jar文件处理。 值false将禁用多版本jar处理,忽略“多版本”清单属性,如果存在多版本的jar文件,则会忽略多版本jar文件中的版本化目录。 此外,方法isMultiRelease()返回假 。 值强制使JarFile在构建后初始化为运行时版本控制。 它有效地与代码相同:(new JarFile(File, boolean, int, JarFile.runtimeVersion())。
-
- 从以下版本开始:
- 1.2
- 另请参见:
-
Manifest,ZipFile,JarEntry
-
-
Field Summary
Fields Modifier and Type Field 描述 static intCENATTstatic intCENATXstatic intCENCOMstatic intCENCRCstatic intCENDSKstatic intCENEXTstatic intCENFLGstatic intCENHDRstatic intCENHOWstatic intCENLENstatic intCENNAMstatic intCENOFFstatic longCENSIGstatic intCENSIZstatic intCENTIMstatic intCENVEMstatic intCENVERstatic intENDCOMstatic intENDHDRstatic intENDOFFstatic longENDSIGstatic intENDSIZstatic intENDSUBstatic intENDTOTstatic intEXTCRCstatic intEXTHDRstatic intEXTLENstatic longEXTSIGstatic intEXTSIZstatic intLOCCRCstatic intLOCEXTstatic intLOCFLGstatic intLOCHDRstatic intLOCHOWstatic intLOCLENstatic intLOCNAMstatic longLOCSIGstatic intLOCSIZstatic intLOCTIMstatic intLOCVERstatic StringMANIFEST_NAMEJAR清单文件名。-
Fields inherited from class java.util.zip.ZipFile
OPEN_DELETE, OPEN_READ
-
-
构造方法摘要
构造方法 Constructor 描述 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。
-
方法摘要
所有方法 静态方法 接口方法 具体的方法 Modifier and Type 方法 描述 static Runtime.VersionbaseVersion()返回表示多版本jar文件的未版本化配置的版本。Enumeration<JarEntry>entries()返回枚举jar文件条目。ZipEntrygetEntry(String name)返回ZipEntry用于给定基本条目名称null如果没有找到。InputStreamgetInputStream(ZipEntry ze)返回用于读取指定zip文件条目内容的输入流。JarEntrygetJarEntry(String name)如果JarEntry,则返回给定基本条目名称的null或null。ManifestgetManifest()返回jar文件清单,如果没有,则返回null。Runtime.VersiongetVersion()返回搜索版本化条目时使用的最大版本。booleanisMultiRelease()指示此jar文件是否为多版本jar文件。static Runtime.VersionruntimeVersion()返回表示多版本jar文件的有效运行时版本配置的版本。Stream<JarEntry>stream()在jar文件条目上返回一个有序的Stream。
-
-
-
字段详细信息
-
MANIFEST_NAME
public static final String MANIFEST_NAME
JAR清单文件名。- 另请参见:
- Constant Field Values
-
LOCSIG
public static final long LOCSIG
- 另请参见:
- Constant Field Values
-
EXTSIG
public static final long EXTSIG
- 另请参见:
- Constant Field Values
-
CENSIG
public static final long CENSIG
- 另请参见:
- Constant Field Values
-
ENDSIG
public static final long ENDSIG
- 另请参见:
- Constant Field Values
-
LOCHDR
public static final int LOCHDR
- 另请参见:
- Constant Field Values
-
EXTHDR
public static final int EXTHDR
- 另请参见:
- Constant Field Values
-
CENHDR
public static final int CENHDR
- 另请参见:
- Constant Field Values
-
ENDHDR
public static final int ENDHDR
- 另请参见:
- Constant Field Values
-
LOCVER
public static final int LOCVER
- 另请参见:
- Constant Field Values
-
LOCFLG
public static final int LOCFLG
- 另请参见:
- Constant Field Values
-
LOCHOW
public static final int LOCHOW
- 另请参见:
- Constant Field Values
-
LOCTIM
public static final int LOCTIM
- 另请参见:
- Constant Field Values
-
LOCCRC
public static final int LOCCRC
- 另请参见:
- Constant Field Values
-
LOCSIZ
public static final int LOCSIZ
- 另请参见:
- Constant Field Values
-
LOCLEN
public static final int LOCLEN
- 另请参见:
- Constant Field Values
-
LOCNAM
public static final int LOCNAM
- 另请参见:
- Constant Field Values
-
LOCEXT
public static final int LOCEXT
- 另请参见:
- Constant Field Values
-
EXTCRC
public static final int EXTCRC
- 另请参见:
- Constant Field Values
-
EXTSIZ
public static final int EXTSIZ
- 另请参见:
- Constant Field Values
-
EXTLEN
public static final int EXTLEN
- 另请参见:
- Constant Field Values
-
CENVEM
public static final int CENVEM
- 另请参见:
- Constant Field Values
-
CENVER
public static final int CENVER
- 另请参见:
- Constant Field Values
-
CENFLG
public static final int CENFLG
- 另请参见:
- Constant Field Values
-
CENHOW
public static final int CENHOW
- 另请参见:
- Constant Field Values
-
CENTIM
public static final int CENTIM
- 另请参见:
- Constant Field Values
-
CENCRC
public static final int CENCRC
- 另请参见:
- Constant Field Values
-
CENSIZ
public static final int CENSIZ
- 另请参见:
- Constant Field Values
-
CENLEN
public static final int CENLEN
- 另请参见:
- Constant Field Values
-
CENNAM
public static final int CENNAM
- 另请参见:
- Constant Field Values
-
CENEXT
public static final int CENEXT
- 另请参见:
- Constant Field Values
-
CENCOM
public static final int CENCOM
- 另请参见:
- Constant Field Values
-
CENDSK
public static final int CENDSK
- 另请参见:
- Constant Field Values
-
CENATT
public static final int CENATT
- 另请参见:
- Constant Field Values
-
CENATX
public static final int CENATX
- 另请参见:
- Constant Field Values
-
CENOFF
public static final int CENOFF
- 另请参见:
- Constant Field Values
-
ENDSUB
public static final int ENDSUB
- 另请参见:
- Constant Field Values
-
ENDTOT
public static final int ENDTOT
- 另请参见:
- Constant Field Values
-
ENDSIZ
public static final int ENDSIZ
- 另请参见:
- Constant Field Values
-
ENDOFF
public static final int ENDOFF
- 另请参见:
- Constant Field Values
-
ENDCOM
public static final int ENDCOM
- 另请参见:
- Constant Field Values
-
-
构造方法详细信息
-
JarFile
public JarFile(String name) throws IOException
创建一个新的JarFile从指定的文件name。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。 版本参数在转换为规范表单后,用于配置JarFile以处理多版本的jar文件。从版本参数派生的规范形式为
Runtime.Version.parse(Integer.toString(n)),其中n为Math.max(version.major(), JarFile.baseVersion().major())。- 参数
-
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或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()
在jar文件条目上返回一个有序的Stream。 条目按照它们出现在jar文件的中央目录中的顺序出现在Stream中。- 重写:
-
stream在ZipFile - 结果
-
这个jar文件中有一个
Stream的条目 - 异常
-
IllegalStateException- 如果jar文件已关闭 - 从以下版本开始:
- 1.8
-
getInputStream
public InputStream getInputStream(ZipEntry ze) throws IOException
返回用于读取指定zip文件条目内容的输入流。- 重写:
-
getInputStream在ZipFile - 参数
-
ze- zip文件条目 - 结果
- 用于读取指定的zip文件条目的内容的输入流
- 异常
-
ZipException- 如果发生zip文件格式错误 -
IOException- 如果发生I / O错误 -
SecurityException- 如果任何jar文件条目未正确签名。 -
IllegalStateException- 如果jar文件已关闭,可能会抛出
-
-