📜  Java Java类

📅  最后修改于: 2022-05-13 01:55:11.575000             🧑  作者: Mango

Java Java类

先决条件 - Java中的 JAR 文件
什么是 .jar 文件?
JavaArchive(JAR) 将所有类捆绑在一个包中。由于存档是压缩的并且可以在单个 HTTP 连接中下载,因此下载存档通常比下载单个类更快。尽管 jar 捆绑了所有类,但它们完全分类的名称可用于在需要时引用各个类。 Java提供了几种从 jar 文件中提取信息的机制。本文介绍了使用 JarURLConnection 类的一种方法。
此类表示与 jar 文件、条目或目录的 URL 连接。当程序员知道 URL 指的是 jar 条目并且需要特定于 jar 的功能时,可以使用它。
Jar URL 的语法:-
Jar URL 以指向 jar 存档位置的通用 URL 开头。比“ jar: ”协议为前缀,最后是“ !/ ”和 jar 存档中文件的路径在此 URL 的末尾添加后缀。例如,

jar:http://www.abcd.com/networking.jar!/com/foo/example.class

如果不使用路径部分,则 URL 指向整个 jar 存档。例如,

jar:http://www.abcd.com/networking.jar!/

构造函数:创建到指定 URL 的 jar URL 连接。

Syntax :protected JarURLConnection(URL url)
                    throws MalformedURLException
Parameters :
url : URL to a jar archive
Throws : 
MalformedURLException: If no protocol identified or string could not be parsed.

方法 :

  1. getJarFileURL() :返回此连接的 jar 文件的 url。
    Syntax :public URL getJarFileURL()
  2. getEntryName() :返回此连接的条目名称,如果它指向 jar 文件而不是 jar 条目文件,则返回 null。
    Syntax :public String getEntryName()
  3. getJarFile() :返回此连接的 jar 文件。
    Syntax :public abstract JarFile getJarFile()
                                throws IOException
    Throws : 
    IOException : If IO exception occurs during connection
  4. getManifest() :返回此连接的清单,如果不存在,则返回 null。清单是一个特殊文件,可以包含有关打包在 JAR 文件中的文件的信息。
    Syntax :public Manifest getManifest()
                         throws IOException
    Throws :
    IOException : If IO exception is thrown while connecting to the url.
  5. getJarEntry() :返回此连接的 JAR 条目对象。 Java应用程序的入口点通常是具有方法public static void main(String args[])的类。如果 url 指向 jar 文件而不是条目,则此方法返回 null。
    Syntax : public JarEntry getJarEntry()
                         throws IOException
  6. getAttributes() :如果 URL 指向 jar 入口文件,则返回此连接的属性。有关属性的更多信息,请访问官方Java教程。
    Syntax :public Attributes getAttributes()
                             throws IOException
  7. getMainAttributes() :返回此连接的主要属性。
    Syntax :public Attributes getMainAttributes()
                                 throws IOException
  8. getCertificates() :如果它指向 jar 入口文件,则返回此连接的证书对象。
    Syntax : public Certificate[] getCertificates()
                                  throws IOException

以下程序假设我们在程序中硬编码的 URL 处有一个 jar 文件。可以看出,硬编码的 URL 仅指向系统上的文件,通过为文件指定正确的 URL,可以在通过网络使用 jar 文件时使用此类。
Java实现:

// Java program to illustrate various
// jarURLConnection class methods 
import java.io.IOException;
import java.net.JarURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.cert.Certificate;
import java.util.Arrays;
import java.util.Map.Entry;
import java.util.jar.Attributes;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.jar.Manifest;
  
public class jarurltest 
{
  
    private final static String JAR_URL = "jar:file:/C:/Users/Rishabh/Desktop" + 
                                     "/testClass.jar!/test/testclass.class";
  
    public static void main(String[] args) throws Exception 
    {
  
        try {
  
            // Create a URL that refers to a jar file in the file system
            URL FileSysUrl = new URL(JAR_URL);
  
            // Create a jar URL connection object
            JarURLConnection jarURLConn = (JarURLConnection) FileSysUrl.openConnection();
  
            // getJarFileURL() method
            System.out.println("Jar file URL : " + jarURLConn.getJarFileURL());
  
            // getEntryName() method
            System.out.println("Entry Name : " + jarURLConn.getEntryName());
  
            // getJarFile() method
            JarFile jarFile = jarURLConn.getJarFile();
            System.out.println("Jar Entry: " + jarURLConn.getJarEntry());
  
            // getManifest() method
            Manifest manifest = jarFile.getManifest();
            System.out.println("Manifest :" + manifest.toString());
  
            // getJarEntry() method
            JarEntry jentry = jarURLConn.getJarEntry();
            System.out.println("Jar Entry : " + jentry.toString());
  
            // getAttributes() method
            Attributes attr = jarURLConn.getAttributes();
            System.out.println("Attributes : " + attr);
  
            // getMainAttributes() method
            Attributes attrmain = jarURLConn.getMainAttributes();
            System.out.println("\nMain Attributes details: ");
  
            for (Entry e : attrmain.entrySet()) 
            {
                System.out.println(e.getKey() + " " + e.getValue());
            }
  
            // getCertificates() method
            Certificate cert[] = jarURLConn.getCertificates();
            System.out.println("\nCertificates Info :" + Arrays.toString(cert));
  
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
  
    }
  
}

输出 :

Jar file URL : file:/C:/Users/Rishabh/Desktop/testClass.jar
Entry Name : test/testclass.class
Jar Entry: test/testclass.class
Manifest :java.util.jar.Manifest@2f1a6037
Jar Entry : test/testclass.class
Attributes : null

Main Attributes details: 
Manifest-Version 1.0
Main-Class test.testclass

Certificates Info :null

相关文章:在Java中使用 JAR 和 Manifest 文件

参考:官方Java文档
书籍: Java网络编程,Elliotte Rusty Harold 着