亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

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

2019-11-18 13:15:31
字體:
來源:轉載
供稿:網友

  加載 GIF 圖像
  假定我們有一個 JAR 文件,其中包含我們的應用程序要使用的一組 .gif 圖像。下面就是使用 JarResources 訪問 JAR 文件中的圖像文件的方法:
  
  JarResources jar = new JarResources ("Images.jar");
  Image logo =
  Toolkit.getDefaultToolkit().createImage (jar.getResource ("logo.gif");
  
  
  這段代碼說明我們可以創建一個 JarResources 對象,并將其初始化為包含我們要使用的資源的 JAR 文件 -- Images.jar。隨后我們使用 JarResources 的 getResource() 方法將來自 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();
  
  接下來,我們使用 ZipInputStream 類訪問檔案。ZipInputStream 類完成了全部魔術,答應我們單獨讀取檔案中的每個資源。我們從檔案中讀取組成每個資源的精確字節數,并將其存儲在 htJarContents hashtable 中,您可以通過資源名訪問這些數據:
  
  FileInputStream fis=new FileInputStream(jarFileName);
  BufferedInputStream bis=new BufferedInputStream(fis);
  ZipInputStream zis=new ZipInputStream(bis);
  ZipEntry ze=null;
  while ((ze=zis.getNextEntry())!=null) {
  if (ze.isDirectory()) {
  continue;
  }
  if (debugOn) {
  System.out.println(
  "ze.getName()="+ze.getName()+","+"getSize()="+ze.getSize()
  );
  }
  int size=(int)ze.getSize();
  // -1 表示大小未知。
  if (size==-1) {
  size=((Integer)htSizes.get(ze.getName())).intValue();
  }
  byte[] b=new byte[(int)size];
  int rb=0;
  int chunk=0;
  while (((int)size - rb) > 0) {
  chunk=zis.read(b,rb,(int)size - rb);
  if (chunk==-1) {
  break;
  }
  rb+=chunk;
  }
  // 添加到內部資源 hashtable 中
  htJarContents.put(ze.getName(),b);
  if (debugOn) {
  System.out.println(
  ze.getName()+" rb="+rb+
  ",size="+size+
  ",csize="+ze.getCompressedSize()
  );
  }
  }
  } catch (NullPointerException e) {
  System.out.println("done.");
  } catch (FileNotFoundException e) {
  e.printStackTrace();
  } catch (IOException e) {
  e.printStackTrace();
  }
  }
  
  請注重,用來標識每個資源的名稱是檔案中資源的限定路徑名,例如,不是包中的類名 -- 即 java.util.zip 包中的 ZipEntry 類將被命名為 "java/util/zip/ZipEntry",而不是 "java.util.zip.ZipEntry"。
  
  代碼的最后一個重要部分是簡單的測試驅動程序。該測試驅動程序是一個簡單的應用程序,它接收 JAR/zip 檔案名和資源名。它試圖發現檔案中的資源文件,然后將成功或失敗的消息報告出來:
  
  public static void main(String[] args) throws IOException {
  if (args.length!=2) {
  System.err.println(
  "usage: java JarResources "
  );
  System.exit(1);
  }
  JarResources jr=new JarResources(args[0]);
  byte[] buff=jr.getResource(args[1]);
  if (buff==null) {
  System.out.println("Could not find "+args[1]+".");
  } else {
  System.out.println("Found "+args[1]+ " (length="+buff.length+").");
  }
  }
  
  } // JarResources 類結束。
  
  您已了解了這個類。一個易于使用的類,它隱藏了使用打包在 JAR 文件中的資源的全部棘手問題。
  
  練習
  現在您對從檔案文件中提取資源已有了一定的熟悉,下面是可用來修改和擴展 JarResources 類的一些說明:
  
  不在構造期間一次性加載全部內容,而要延遲加載。對于大型 JAR 文件,構造期間可能沒有足夠的內存加載全部文件。
  
  不只是提供類似 getResource() 這樣的一般讀方法,我們還可提供資源特定的讀方法 -- 例如,用來返回 Java Image 對象的 getImage() 方法,用來返回 Java Class 對象的 getClass() 方法(在自定義的類加載程序的協助下),等等。假如 JAR 文件足夠小,則我們可以根據它們的擴展名(.gif、.class 等等)預先構建全部資源。
  
  某些方法應該提供關于給定 JAR 文件本身(基本上是 ZipFile 的包裝)的信息,包括:Jar/zip 的條目數;返回全部資源名的 Enumerator;返回特定條目長度(和其他屬性)的讀方法;答應編制索引的讀方法,這僅僅是舉幾個例子。
  
  可對 JarResources 進行擴展,以供 applet 使用。通過利用 applet 參數和 URLConnection 類,就可以從網絡上下載 JAR 內容,而不是將檔案作為本地文件打開。此外,我們還可將該類擴展為一個自定義的 Java 內容處理程序。
  
  小結
  假如您曾經渴望知道如何從 JAR 文件中提取圖像,那么您現在已學到了一種方法。有了本技巧提供的這個新類,您就不僅可以用 JAR 文件處理圖像,而且可以將提取魔術用于 JAR 文件中的任何資源。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲全黄一级网站| 成人免费看吃奶视频网站| 日本精品久久中文字幕佐佐木| 国产日韩欧美日韩| 欧美精品久久久久| 日韩专区中文字幕| 国产精品视频xxx| 成人黄色短视频在线观看| 亚洲电影在线看| 久久视频在线看| 精品国模在线视频| 日韩av影院在线观看| 国产精品成人在线| 黑人极品videos精品欧美裸| 亚洲福利精品在线| 91禁外国网站| 中文字幕日韩av| 性色av香蕉一区二区| 日本在线观看天堂男亚洲| 国产一区二区三区高清在线观看| 久久久久久久久久久久久久久久久久av| 国产中文字幕91| 色偷偷偷综合中文字幕;dd| xxxx欧美18另类的高清| 欧美日本啪啪无遮挡网站| 91亚洲国产成人精品性色| 日韩高清欧美高清| 26uuu另类亚洲欧美日本一| 国产精品成人观看视频国产奇米| 91精品视频在线看| 日韩电视剧免费观看网站| 久久这里只有精品99| 日韩av日韩在线观看| 久久中文精品视频| 亚洲第一综合天堂另类专| 国内成人精品视频| 国产精品白丝av嫩草影院| 亚洲欧美国产精品专区久久| 亚洲va欧美va国产综合剧情| 亚洲激情视频在线观看| 欧美日韩午夜视频在线观看| 日韩av免费看| 国产精品视频在线播放| 久久久精品999| 欧美猛男性生活免费| 久久天天躁狠狠躁老女人| 国内精品久久久久久久| 中文字幕一区二区三区电影| 欧美成人黄色小视频| 91免费在线视频| 久久精品视频va| 亚洲网站在线播放| 97精品国产97久久久久久| 亚洲影视九九影院在线观看| 国产91久久婷婷一区二区| 欧美午夜精品久久久久久久| 亚洲一区二区久久久| 日韩av不卡电影| 成人亲热视频网站| 精品一区二区电影| 亚洲第一天堂av| 国产精品 欧美在线| 国产欧美久久久久久| 国产精品美女久久久久久免费| 中文字幕欧美日韩| 91精品国产综合久久久久久久久| 国产精彩精品视频| 亚洲欧美三级伦理| 久久精品国产精品亚洲| 久久亚洲一区二区三区四区五区高| 国产欧美一区二区三区四区| 成人国内精品久久久久一区| 国产一区二区久久精品| 91色琪琪电影亚洲精品久久| 福利精品视频在线| 国产高清视频一区三区| 97在线精品视频| 91精品啪aⅴ在线观看国产| 日韩欧美在线视频免费观看| 亚洲欧美日韩精品久久| 久久91亚洲人成电影网站| 国产精品中文字幕在线观看| 日韩在线播放av| 国产精品久久97| 88国产精品欧美一区二区三区| 亚洲欧美激情精品一区二区| 国产国产精品人在线视| 国产成人极品视频| 久久全球大尺度高清视频| 日韩欧美精品免费在线| www.日韩系列| 国产91色在线免费| 法国裸体一区二区| 91国自产精品中文字幕亚洲| 国产亚洲视频在线| 日本一区二区不卡| 欧美夜福利tv在线| 国产精品久久二区| 国产亚洲一区二区在线| 亚洲www在线| 久久久91精品国产一区不卡| 亚洲成成品网站| 亚洲国产精品女人久久久| 成人激情视频小说免费下载| 日韩欧美在线免费观看| 日韩av中文字幕在线| 中文字幕av日韩| 亚洲欧洲在线视频| 亚洲丝袜av一区| 亚洲嫩模很污视频| 国产精品成人播放| 亚洲sss综合天堂久久| 最好看的2019年中文视频| 国产精品久久久久久久久久新婚| 亚洲精品白浆高清久久久久久| 欧美激情欧美激情| 国产精品久久久亚洲| 色综合91久久精品中文字幕| 国产亚洲免费的视频看| 欧美国产亚洲视频| 色哟哟网站入口亚洲精品| 欧美成人性色生活仑片| 韩剧1988免费观看全集| 欧美大片在线免费观看| 91老司机在线| 国内精品久久久久久久| 欧美大人香蕉在线| 欧美最猛黑人xxxx黑人猛叫黄| 欧美在线不卡区| 在线日韩欧美视频| 久久久电影免费观看完整版| 欧美激情视频一区二区| 久久亚洲欧美日韩精品专区| 91成人福利在线| 91九色综合久久| 日本久久久久久久| 欧美国产在线电影| 91高潮精品免费porn| 欧美日韩福利在线观看| 欧美成人合集magnet| 日本久久久久久| 91精品国产91久久久久久不卡| 日本久久久a级免费| 国产精品爽爽爽爽爽爽在线观看| 不卡伊人av在线播放| 久久露脸国产精品| 亚洲欧洲国产伦综合| 国产91色在线| 亚洲免费一级电影| 91av在线播放| 色先锋久久影院av| 国产成人精品免费久久久久| 午夜免费在线观看精品视频| 亚洲国产精品网站| 91香蕉嫩草神马影院在线观看| 岛国av在线不卡| 国内伊人久久久久久网站视频| 日韩视频一区在线| 精品少妇v888av| 精品香蕉在线观看视频一| 欧美激情第1页| 国产精品久久久久久久av电影| 一区国产精品视频| 红桃视频成人在线观看|