Module  java.base
软件包  java.util.jar

Class JarFile

  • All Implemented Interfaces:
    CloseableAutoCloseable


    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平台的主要版本分区。 甲版本条目,具有版本n8 < 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
    另请参见:
    ManifestZipFileJarEntry
    • 构造方法详细信息

      • 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_READOPEN_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_READOPEN_READ | OPEN_DELETE 版本参数在转换为规范表单后,用于配置JarFile以处理多版本的jar文件。

        从版本参数派生的规范形式为Runtime.Version.parse(Integer.toString(n)) ,其中nMath.max(version.major(), JarFile.baseVersion().major())

        参数
        file - 要打开阅读的jar文件
        verify - 是否验证jar文件是否被签名。
        mode - 要打开文件的模式
        version - 指定多版本jar文件的发行版本
        异常
        IOException - 如果发生I / O错误
        IllegalArgumentException - 如果 mode参数无效
        SecurityException - 如果SecurityManager对该文件的访问被拒绝
        NullPointerException - 如果 versionnull
        从以下版本开始:
        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 ,则返回给定基本条目名称的nullnull

        如果这个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()返回的最大版本。

        重写:
        getEntryZipFile
        实现要求:
        即使没有相应的基本条目,此实现也可能返回所请求名称的版本化条目。 如果有私有或包私有版本的条目匹配,则可能会发生这种情况。 如果子类覆盖此方法,请确保覆盖方法调用super.getEntry(name)以获取所有版本化条目。
        参数
        name - jar文件条目名称
        结果
        ZipEntry的给定条目名称或版本号的条目名称或 null如果没有找到
        异常
        IllegalStateException - 如果jar文件已关闭,可能会抛出
        另请参见:
        ZipEntry
      • stream

        public Stream<JarEntry> stream​()
        在jar文件条目上返回一个有序的Stream 条目按照它们出现在jar文件的中央目录中的顺序出现在Stream中。
        重写:
        streamZipFile
        结果
        这个jar文件中有一个 Stream的条目
        异常
        IllegalStateException - 如果jar文件已关闭
        从以下版本开始:
        1.8