Module java.base
Package java.net

Class 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文件中读取。使用这个类无法获取用于修改或写入底层JAR文件的OutputStream

示例:

一个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/

!/被称为分隔符

通过new URL(context, spec)构造JAR URL时,应遵循以下规则:

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

    示例:

    上下文:jar:http://www.foo.com/bar/jar.jar!/,规范:baz/entry.txt
    URL:jar:http://www.foo.com/bar/jar.jar!/baz/entry.txt
    上下文:jar:http://www.foo.com/bar/jar.jar!/baz,规范:entry.txt
    URL:jar:http://www.foo.com/bar/jar.jar!/baz/entry.txt
    上下文:jar:http://www.foo.com/bar/jar.jar!/baz,规范:/entry.txt
    URL:jar:http://www.foo.com/bar/jar.jar!/entry.txt
自版本:
1.2
参见:
  • Field Details

    • jarFileURLConnection

      protected URLConnection jarFileURLConnection
      如果连接已经初始化,则返回到JAR文件URL的连接。这应该由connect设置。
  • Constructor Details

    • JarURLConnection

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

    • 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
      返回此连接的Manifest,如果没有则返回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文件的主Attributes。
      返回:
      此连接的JAR文件的主Attributes。
      抛出:
      IOException - 如果获取清单导致抛出IOException。
      参见:
    • getCertificates

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