模块  java.base
软件包  java.util.jar

Class JarFile

  • 实现的所有接口
    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()分配给最后一个参数。 这确保了从多版本jar文件加载与正在运行的JVM的主要版本兼容的类。

    如果在打开已签名的jar文件时打开了verify标志,则会根据与其path name关联的清单中嵌入的签名验证jar条目的内容。 对于多版本jar文件,版本化条目的内容是针对其自己的签名的verfieidJarEntry.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值之一的truefalseforce true (默认值)启用多版本jar文件处理。 false禁用多版本jar处理,忽略“多版本”清单属性,以及多版本jar文件中的版本化目录(如果存在)。 此外,方法isMultiRelease()返回false force会导致JarFile在构造后初始化为运行时版本控制。 它实际上与此代码相同: (new JarFile(File, boolean, int, JarFile.runtimeVersion())
    从以下版本开始:
    1.2
    另请参见:
    ManifestZipFileJarEntry
    • 构造方法详细信息

      • 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_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 转换为规范形式后,version参数用于配置JarFile以处理多版本jar文件。

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

        参数
        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用于给定基本条目名称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()返回的最大版本。

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