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

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

從JAR文件中讀取文件

2019-11-18 12:09:06
字體:
來源:轉載
供稿:網友

  版權聲明:可以任意轉載,轉載時請務必以超鏈接形式標明文章原始出處和作者信息及本聲明
  
  作者:John Zukowski
  翻譯:Roger Sun
  原文來源:
  http://developer.java.sun.com/developer/JDCTechTips/2003/tt0122.Html#1
  譯文地址:
  http://www.ydtx.com/cgi-bin/forum/topic.cgi?forum=27&topic=8
  
  ==============================================
  
  JAR文件是打包基于JAVA技術的解決方案的標準方法。它答應開發者將所有相關內容(.class、圖片、聲音、及所有支持的文件)打包到一個文件中。JAR格式支持壓縮、認證、版本號及其他很多特性。
  
  從JAR文件中讀取文件是很麻煩的事情,但是也不一定全是這樣。本文將告訴你如何從JAR文件中讀取文件,首先,得到JAR文件中的文件目錄,然后在進行具體的某一個文件的操作。
  
  假如你對于常用的ZIP格式比較熟悉的話,JAR文件也就差不多。JAR文件提供一種將多個文件打包到一個文件中的方法,其中每一個文件可能獨立地被壓縮。JAR文件所增加的內容是manifest,它答應開發者可以提供附加的關于內容的信息。例如,manifest表明JAR文件中的哪個文件是用來運行一個程序的,或者庫的版本號等
  
  J2SEDK提供了一個jar工具,你可以用它從控制臺讀寫JAR文件。然而,假如你需要在程序中代碼讀寫JAR文件,可能需要一點時間(本文只包含如何在程序中讀寫JAR文件)。好消息是你可以做到這一點,而且你不用擔心解壓的事,因為類庫將幫助你完成這些。你所需要的類文件位于java.util.jar包中。這里主要的類是JarFile,它是.jar文件自身的一個引用。較大文件中的每一個單獨的文件是通過一個JarEntry引用的。
  
  首先,通過把將JAR文件位置傳給構造函數,創建一個JarFile的實例,位置可能是String或File的形式,如下:
    JarFile jarFile = new JarFile("thefile.jar");
  
  或者:
  
    File file = new File("thefile.jar");
    JarFile jarFile = new JarFile(file);
  
  
  你可能注重到當文件不在class path中時,JarFile類對于從JAR中讀取文件文件是很有用的。
  當你想指定目標JAR文件時,JarFile類對于從JAR中讀取文件同樣也很有用。當然,假如JAR文件在class path中,從其中讀取文件的方法比較簡單,你可以用下面的方法:
  
   URL url = ClassLoader.getSystemResource(name);
  或者
  
   InputStream stream =
     ClassLoader.getSystemResourceAsStream(name);
  
  這種技術答應你從在class path中的JAR文件里讀取文件。你不必指定JAR文件名。
  
  
  還有其他的構造函數,如認證支持,標志要刪除的文件等。這些構造函數在這兒不做說明。
  
  當你有了該JAR文件的一個引用之后,你就可以讀取其文件內容中的目錄信息了。JarFile的entries方法返回所有entries的枚舉集合(Enumeration)。通過每一個entry,你可以從它的manifest文件得到它的屬性,任何認證信息,以及其他任何該entry的信息,如它的名字或者大小等。
  
   Enumeration enum = jarFile.entries();
   while (enum.hasMoreElements()) {
    PRocess(enum.nextElement());
   }
  
  正如前面提到的,每一個entry是一個JarEntry。該類有getName,getSize,getCompressedSize等方法。
  
  下面,讓我們舉例說明在程序中如何使用這些特性。下面的程序顯示你指定的JAR文件中內容的名稱,大小,壓縮大小等(這有點類似于在使用jar命令時,指定"t"和"v"選項)。
  
   import java.io.*;
   import java.util.*;
   import java.util.jar.*;
  
   public class JarDir {
    public static void main (String args[])
      throws IOException {
     if (args.length != 1) {
      System.out.println(
        "Please provide a JAR filename");
      System.exit(-1);
     }
     JarFile jarFile = new JarFile(args[0]);
     Enumeration enum = jarFile.entries();
     while (enum.hasMoreElements()) {
      process(enum.nextElement());
     }
    }
  
    private static void process(Object obj) {
     JarEntry entry = (JarEntry)obj;
     String name = entry.getName();
     long size = entry.getSize();
     long compressedSize = entry.getCompressedSize();
     System.out.println(
       name + "/t" + size + "/t" + compressedSize);
    }
   }
  
  假如你用J2SE1.4.1中的jce.jar作為參數運行上面的JarDir程序,你將看到類似于下面的輸出(...部分為省略掉的輸出):
  
  META-INF/MANIFEST.MF  5315  1910
  META-INF/4JCEJARS.SF  5368  1958
  META-INF/4JCEJARS.DSA  2207  1503
  META-INF/    0    2
  javax/ 0    0
  javax/crypto/  0    0
  javax/crypto/interfaces/    0    0
  javax/crypto/interfaces/DHKey.class   209   185
  javax/crypto/interfaces/DHPublicKey.class    265   215
  javax/crypto/interfaces/DHPrivateKey.class   267   215
  javax/crypto/interfaces/PBEKey.class  268   224
  javax/crypto/SecretKey.class  167   155
  ...
  
  注重輸出最開始的META-INF行。這是manifest和安全認證信息。0字節的entries不是文件,但是有點相當于目錄。
  
  為了從JAR文件中真正讀取一個指定的文件,你必須到其entry的InputStream。這和JarEntry不一樣。這是因為JarEntry只是包含該entry的有關信息,但是并不實際包含該entry的內容。這和File和FileInputStream的區別有點兒相似。訪問文件沒有打開文件,它只是從目錄中讀取了該文件的信息。下面是如何得到entry的InputStream:
  
   InputStream input = jarFile.getInputStream(entry);
  
  當你有了輸入流,你就可以像讀取其他流一樣讀取它。在文本流中(text stream),記得使用讀取器(Reader)從流中取得字符。對于面向字節的流,如圖片文件,直接讀取就行了。
  
  下面的程序演示如何從JAR文件中讀取文件。指定JAR文件的名稱,要讀取的文件的名稱(打包JAR文件中的某一個文件)作為參數來調用該程序。要讀取的文件應該有一個文本類型的。
  
   import java.io.*;
   import java.util.jar.*;
  
   public class JarRead {
    public static void main (String args[])
      throws IOException {
     if (args.length != 2) {
      System.out.println(
       "Please provide a JAR filename and file to read");
      System.exit(-1);
     }
     JarFile jarFile = new JarFile(args[0]);
     JarEntry entry = jarFile.getJarEntry(args[1]);
     InputStream input = jarFile.getInputStream(entry);
     process(input);
     jarFile.close();
    }
  
    private static void process(InputStream input)
      throws IOException {
     InputStreamReader isr =
     new InputStreamReader(input);
     BufferedReader reader = new BufferedReader(isr);
     String line;
     while ((line = reader.readLine()) != null) {
      System.out.println(line);
     }
     reader.close();
    }
   }
  
  假設在myfiles.jar文件中有一個spider.txt文件,spider文件的內容如下:
  
   The itsy bitsy spider
   Ran up the water spout
   Down came the rain and
   Washed the spider out
  
  你可以通過下面的命令來顯示該文本文件的內容:
  
   java JarRead myfiles.jar spider.txt 
  
  有關JAR文件的更多內容,請參考JAR文件規范

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产福利成人在线| 97国产精品人人爽人人做| 亚洲第一天堂无码专区| 国产欧美中文字幕| 欧美激情国产日韩精品一区18| 亚洲毛片在线免费观看| 美女999久久久精品视频| 亚洲精品aⅴ中文字幕乱码| 国产成人+综合亚洲+天堂| 在线视频中文亚洲| 97超视频免费观看| 亚洲人成在线免费观看| 超碰97人人做人人爱少妇| 国产精品av电影| 亚洲欧洲日本专区| 久久免费精品日本久久中文字幕| 8090理伦午夜在线电影| 欧美激情一区二区三级高清视频| 亚洲一区二区在线播放| 精品调教chinesegay| 国产日本欧美在线观看| 国产精品自拍偷拍| 欧美日韩一区二区在线播放| 久久噜噜噜精品国产亚洲综合| 国产精品视频永久免费播放| 亚洲综合在线中文字幕| 亚洲成人性视频| 日本精品久久中文字幕佐佐木| 亚洲娇小xxxx欧美娇小| 久久精品视频在线播放| 国产免费一区二区三区在线观看| 美日韩丰满少妇在线观看| 91精品国产九九九久久久亚洲| 精品在线小视频| 国产精品91免费在线| 日本精品久久电影| 日韩高清a**址| 日韩中文字幕第一页| 亚洲女人被黑人巨大进入al| 日韩精品在线观看一区| 亚洲91精品在线| 久久精品中文字幕电影| 亚洲欧美日韩天堂一区二区| 亚洲视频视频在线| 亚洲自拍另类欧美丝袜| 成人xxxx视频| 久久91精品国产| 久久久99免费视频| 青青a在线精品免费观看| 成人黄色生活片| 韩国三级电影久久久久久| 亚洲国产天堂久久综合网| 国产精品第一第二| 欧美大尺度激情区在线播放| 欧美专区在线播放| 国内久久久精品| 91久久久亚洲精品| 亚洲国产成人久久综合一区| 中文字幕在线观看日韩| 欧美性videos高清精品| 亚洲电影成人av99爱色| 精品国产31久久久久久| 538国产精品一区二区在线| 91在线直播亚洲| 欧美激情视频三区| 国产精品欧美风情| 久久九九有精品国产23| 亚洲成人性视频| 中文字幕免费国产精品| 久久精品国产欧美亚洲人人爽| 久久久久国产精品www| 欧美精品做受xxx性少妇| 国产精品久久97| 久久久久久12| 国产精品视频yy9099| 精品久久久久久| 亚洲аv电影天堂网| 久久久免费观看| 欧美激情视频网站| 日韩欧美有码在线| 91免费版网站入口| 日韩久久精品成人| 亚洲自拍偷拍网址| 69**夜色精品国产69乱| 91亚洲国产成人精品性色| 国产亚洲视频在线| 国产精品免费观看在线| 日本电影亚洲天堂| 日韩免费在线视频| 日韩有码在线电影| 日韩在线观看成人| 欧美贵妇videos办公室| 精品欧美aⅴ在线网站| 日韩在线观看电影| 久久久久久久久综合| 亚洲的天堂在线中文字幕| 精品国产美女在线| 日韩av中文在线| 日韩欧美大尺度| 国产精品视频成人| 美女黄色丝袜一区| 亚洲片在线资源| 亚洲精品美女在线| 亚洲人精品午夜在线观看| 精品久久久久久亚洲国产300| 午夜精品久久久久久久男人的天堂| 亚洲视频国产视频| 97视频免费观看| 亚洲一区二区在线| 亚洲一区二区在线播放| 亚洲欧洲午夜一线一品| 久热精品视频在线免费观看| 日韩一区二区三区在线播放| 色偷偷av一区二区三区乱| 国产一区二区三区在线视频| 亚洲摸下面视频| 97成人精品区在线播放| 国产精品无码专区在线观看| 成人观看高清在线观看免费| 91色视频在线导航| 最近的2019中文字幕免费一页| 亚洲日本aⅴ片在线观看香蕉| 高清日韩电视剧大全免费播放在线观看| 亚洲第一精品久久忘忧草社区| 在线精品视频视频中文字幕| 亚洲成人久久网| 久久久女女女女999久久| 日韩av一区二区在线观看| 亚洲欧美日韩在线高清直播| 中文字幕亚洲无线码a| 最新69国产成人精品视频免费| 欧美有码在线观看视频| 国产精品久久久久久久7电影| 国产精品偷伦视频免费观看国产| 国产日韩欧美中文在线播放| 日韩一区二区精品视频| 国产精品∨欧美精品v日韩精品| 欧美性猛交xxxx免费看| 91国内揄拍国内精品对白| 精品亚洲一区二区三区四区五区| 欧美中文字幕视频在线观看| 日韩成人在线视频| 亚洲午夜性刺激影院| 国产欧美精品日韩| 欧美综合一区第一页| 热久久免费国产视频| 啪一啪鲁一鲁2019在线视频| 日韩精品极品在线观看| www欧美日韩| 国产精品永久免费观看| 国产精品久久久久久婷婷天堂| 欧美激情视频网址| 欧美电影院免费观看| 亚洲美女在线看| 国产999视频| 隔壁老王国产在线精品| 亚洲成人精品久久| 亚洲人成电影网站| 国产91精品久久久久久久| 91精品视频一区| 国产视频精品在线| 日韩精品黄色网| 欧美大片第1页| 国产成人精品最新|