模块 java.base
 java.net

类 JarURLConnection

java.lang.Object
java.net.URLConnection
java.net.JarURLConnection

public abstract class JarURLConnection extends URLConnection
到 Java ARchive (JAR) 文件或 JAR 文件中条目的 URL 连接。

JAR URL 的语法是:

 jar:<url>!/{entry}
 

例如:

jar:http://www.foo.com/bar/baz.jar!/COM/foo/Quux.class

Jar URL 应用于引用 JAR 文件或 JAR 文件中的条目。上面的示例是一个引用 JAR 条目的 JAR URL。如果省略条目名称,则 URL 引用整个 JAR 文件:jar:http://www.foo.com/bar/baz.jar!/

当用户知道他们创建的 URL 是 JAR URL 并且他们需要特定于 JAR 的功能时,他们应该将通用 URLConnection 转换为 JarURLConnection。例如:

 URL url = new URL("jar:file:/home/duke/duke.jar!/");
 JarURLConnection jarConnection = (JarURLConnection)url.openConnection();
 Manifest manifest = jarConnection.getManifest();
 

JarURLConnection 实例只能用于读取 JAR 文件。无法使用此类获取 OutputStream 来修改或写入底层 JAR 文件。

示例:

一个 Jar 条目
jar:http://www.foo.com/bar/baz.jar!/COM/foo/Quux.class
一个 Jar 文件
jar:http://www.foo.com/bar/baz.jar!/
一个 Jar 目录
jar:http://www.foo.com/bar/baz.jar!/COM/foo/

!/ 被称为 separator

通过 new URL(context, spec) 构建 JAR url 时,以下规则适用:

  • 如果没有上下文 URL 并且传递给 URL 构造方法的规范不包含分隔符,则该 URL 被认为是引用 JarFile。
  • 如果存在上下文 URL,则假定上下文 URL 引用 JAR 文件或 Jar 目录。
  • 如果规范以“/”开头,则 Jar 目录将被忽略,并且规范被认为位于 Jar 文件的根目录中。

    示例:

    语境:罐子:http://www.foo.com/bar/jar.jar!/, 规格:baz/条目.txt
    网址:罐子:http://www.foo.com/bar/jar.jar!/baz/entry.txt
    语境:罐子:http://www.foo.com/bar/jar.jar!/baz, 规格:entry.txt
    网址:罐子:http://www.foo.com/bar/jar.jar!/baz/entry.txt
    语境:罐子:http://www.foo.com/bar/jar.jar!/baz, 规格:/条目.txt
    网址:罐子:http://www.foo.com/bar/jar.jar!/entry.txt
自从:
1.2
参见:
  • 字段详细信息

    • jarFileURLConnection

      protected URLConnection  jarFileURLConnection
      到 JAR 文件 URL 的连接(如果连接已启动)。这应该由连接设置。
  • 构造方法详细信息

    • JarURLConnection

      protected JarURLConnection(URL  url) throws MalformedURLException
      为指定的 URL 创建新的 JarURLConnection。
      参数:
      url - 网址
      抛出:
      MalformedURLException - 如果在规范字符串中找不到合法协议或无法解析该字符串。
  • 方法详情

    • getJarFileURL

      public URL  getJarFileURL()
      返回此连接的 Jar 文件的 URL。
      返回:
      此连接的 Jar 文件的 URL。
    • getEntryName

      public String  getEntryName()
      返回此连接的条目名称。如果与此连接对应的 JAR 文件 URL 指向 JAR 文件而不是 JAR 文件条目,则此方法返回 null。
      返回:
      此连接的条目名称(如果有)。
    • getJarFile

      public abstract JarFile  getJarFile() throws IOException
      返回此连接的 JAR 文件。
      返回:
      此连接的 JAR 文件。如果连接是到 JAR 文件条目的连接,则返回 JAR 文件对象
      抛出:
      IOException - 如果在尝试连接到此连接的 JAR 文件时发生 IOException。
      参见:
    • getManifest

      public Manifest  getManifest() throws IOException
      返回此连接的清单,如果没有则返回 null。
      返回:
      与此连接的 JAR 文件对象对应的清单对象。
      抛出:
      IOException - 如果获取此连接的 JAR 文件导致抛出 IOException。
      参见:
    • getJarEntry

      public JarEntry  getJarEntry() throws IOException
      返回此连接的 JAR 条目对象(如果有)。如果与此连接对应的 JAR 文件 URL 指向 JAR 文件而不是 JAR 文件条目,则此方法返回 null。
      返回:
      此连接的 JAR 条目对象,如果此连接的 JAR URL 指向 JAR 文件,则为 null。
      抛出:
      IOException - 如果获取此连接的 JAR 文件导致抛出 IOException。
      参见:
    • getAttributes

      public Attributes  getAttributes() throws IOException
      如果此连接的 URL 指向 JAR 文件条目,则返回此连接的 Attributes 对象,否则返回 null。
      返回:
      如果它的 URL 指向 JAR 文件条目,则返回此连接的 Attributes 对象,否则返回 null。
      抛出:
      IOException - 如果获取 JAR 条目导致抛出 IOException。
      参见:
    • getMainAttributes

      public Attributes  getMainAttributes() throws IOException
      返回此连接的 JAR 文件的主要属性。
      返回:
      此连接的 JAR 文件的主要属性。
      抛出:
      IOException - 如果获取清单导致抛出 IOException。
      参见:
    • getCertificates

      public Certificate [] getCertificates() throws IOException
      如果此连接的 URL 指向 JAR 文件条目,则返回此连接的 Certificate 对象,否则返回 null。只有通过从输入流中读取直到到达流末尾来完全验证连接后,才能调用此方法。否则,此方法将返回 null
      返回:
      如果此连接的 URL 指向 JAR 文件条目,则此连接的 Certificate 对象,否则为 null。
      抛出:
      IOException - 如果获取 JAR 条目导致抛出 IOException。
      参见: