国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

如何從 JAR 和 zip 檔案文件中提取 Java 資源

2019-11-18 14:45:59
字體:
來源:轉載
供稿:網友
java 技巧 49:如何從 JAR 和 zip 檔案文件中提取 Java 資源
您是剛開始接觸 JAR 文件嗎?這個新類可幫您解決問題!

作者:John D. Mitchell 和 Arthur Choi
摘要
將一類 Java 資源打包在一個 Java ARchive (JAR) 文件中是縮短下載時間、增強安全性和增強可治理性的極好方法。這篇技巧說明如何很輕易地從 JAR 文件中提取資源以供您自己使用。
<-- begin body text -->多數 Java 程序員都非常清楚使用 JAR 文件將組成 Java 解決方案的各種資源(即 .class 文件、聲音和圖像)打包的優點。(假如您不熟悉 JAR 文件,請參閱后文的參考資源部分。)剛開始使用 JAR 文件的人常問的一個問題是:“如何從 JAR 文件中提取圖像呢?”本文將回答這個問題,并會提供一個類,這個類使從 JAR 文件中提取任何資源變得非常簡單!

加載 GIF 圖像
假定我們有一個 JAR 文件,其中包含我們的應用程序要使用的一組 .gif 圖像。下面就是使用 JarResources 訪問 JAR 文件中的圖像文件的方法:

    JarResources jar = new JarResources ("Images.jar");
    Image logo =
 Toolkit.getDefaultToolkit().createImage (jar.getResource ("logo.gif");

這段代碼說明我們可以創建一個 JarResources 對象,并將其初始化為包含我們要使用的資源的 JAR 文件 -- Images.jar。隨后我們使用 JarResourcesgetResource() 方法將來自 logo.gif 文件的原始數據提供給 AWT Toolkit 的 createImage() 方法。

命名說明
JarResource 是一個非常簡單的示例,它說明了如何使用 Java 1.1 所提供的各種功能來處理 JAR 和 zip 檔案文件。

關于命名的簡要說明。Java 中的歸檔支持實際上是以流行的 zip 歸檔格式為起點的(請參閱 "Java Tip 21: Use archive files to speed up applet loading")。因此,在最初實現處理檔案文件的 Java 支持時,所有類文件以及諸如此類的東西并未放在 java.util.zip 包中;這些類通常以 "Zip" 開頭。但在轉向 Java 1.1 時,功能已發生了變化,檔案文件的名稱也更具有 Java 特征。因此,現在我們稱之為 JAR 文件的文件基本上是 zip 文件。

工作方式
JarResources 類的重要數據域用來跟蹤和存儲指定 JAR 文件的內容:

public final class JarResources {

   public boolean debugOn=false;

   PRivate Hashtable htSizes=new Hashtable();
   private Hashtable htJarContents=new Hashtable();

   private String jarFileName;

這樣,該類的實例化設置 JAR 文件的名稱,然后轉到 init() 方法完成全部實際工作。

   public JarResources(String jarFileName) {
      this.jarFileName=jarFileName;
      init();
   }

現在,init() 方法只將指定 JAR 文件的整個內容加載到一個 hashtable(通過資源名訪問)中。

這是一個相當有用的方法,下面我們對它作進一步的分析。ZipFile 類為我們提供了對 JAR/zip 檔案頭信息的基本訪問方法。這類似于文件系統中的目錄信息。下面我們列出 ZipFile 中的所有條目,并用檔案中每個資源的大小添充 htSizes hashtable:

   private void init() {
      try {
          ZipFile zf=new ZipFile(jarFileName);
          Enumeration e=zf.entries();
          while (e.hasMoreElements()) {
              ZipEntry ze=(ZipEntry)e.nextElement();
              if (debugOn) {
                 System.out.println(dumpZipEntry(ze));
              }
              htSizes.put(ze.getName(),new Integer((int)ze.getSize()));
          }
          zf.close();



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 普兰县| 长阳| 吉首市| 璧山县| 保靖县| 渝北区| 新营市| 米易县| 青州市| 揭阳市| 内江市| 汕头市| 喀什市| 综艺| 沙坪坝区| 普安县| 砚山县| 安吉县| 定西市| 广宁县| 建平县| 阿瓦提县| 四川省| 饶阳县| 西和县| 荃湾区| 综艺| 五原县| 黄梅县| 思茅市| 安顺市| 花莲县| 鹤庆县| 商水县| 旺苍县| 河津市| 六枝特区| 乌拉特中旗| 顺平县| 古丈县| 玉门市|