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

首頁 > 編程 > Java > 正文

從Java的jar文件中讀取數據的方法

2019-11-26 15:09:32
字體:
來源:轉載
供稿:網友

本文實例講述了從Java的jar文件中讀取數據的方法。分享給大家供大家參考。具體如下:

Java 檔案 (Java Archive, JAR) 文件是基于 Java 技術的打包方案。它們允許開發人員把所有相關的內容 (.class、圖片、聲音和支持文件等) 打包到一個單一的文件中。JAR 文件格式支持壓縮、身份驗證和版本,以及許多其它特性。

從 JAR 文件中得到它所包含的文件內容是件棘手的事情,但也不是不可以做到。這篇技巧就將告訴你如何從 JAR 文件中取得一個文件。我們會先取得這個 JAR 文件中的文件目錄,然后讀取指定的文件。

如果你熟悉常見的 ZIP 格式,你會發現 JAR 文件和它區別不大。JAR 文件提供了一個把多個文件打包到一個文件中的方法,而且被打包的每個文件都可以分別壓縮。JAR 文件可以添加一個被稱為 manifest  的東西,它們允許開發人員添加與內容有關的其它信息。例如,manifest 可以指明由 JAR 文件中的哪一個文件開始運行應用程序,或者指定這個庫的版本等。

Java 2 SDK 標準版提供了一個 jar 工具,你可以通過它在控制臺下讀寫 JAR 文件。然后,也許有些時候你想在你的程序中讀寫 JAR 文件。(這篇技巧僅涉及了在程序中讀 JAR 文件的內容。)非常高興,你可以做到,并且不需要考慮解壓的問題,因為類庫已經幫你處理了。你要用到的類都在 java.util.jar 包中。這里要用到的主要的類是 JarFile 類,它是一個 .jar 文件自身的引用。其中的每個文件則由 JarEntry 引用。

現在開始,傳遞一個參數給 JarFile 的構造函數創建一個 JarFile 實例,這個參數可能是 String 也可以是 File,它是一個 .jar 文件的位置:

復制代碼 代碼如下:
JarFile jarFile = new JarFile("thefile.jar");

或者

復制代碼 代碼如下:
File file = new File("thefile.jar");
JarFile jarFile = new JarFile(file);

它還有其它一些構造函數,支持身份驗證和標記文件為刪除。不過這里不會涉及到這些構造函數。

在你得到一個 JAR 文件的引用之后,你就可以讀了其內容的目錄了。JarFile 的 entries 方法返回一個所有條目的 Enumeration 對象,你還可以從 manifest 文件中獲得它的屬性、身份驗證信息以及其它的信息,如條目的名稱和大小。

// 譯者注:enum 在 Java 5.0 中是關鍵字,所以該例在 5.0 中應該編譯失敗// 但英文原著發表于 Java 5.0 出現之前,所以可以使用 enum 作變量名// 為忠于原著,這里未作修改Enumeration enum = jarFile.entries();while (enum.hasMoreElements()) {  process(enum.nextElement());}

以前提到過,每個個體都是一個 JarEntry。這個類有一些諸如 getName、getSize 和getCompressedSize 的方法。

讓我們舉例說明如何在程序中使用這些特性。下面的程序顯示 JAR 文件的內容列表及各項的名稱、大小和壓縮后的大小。(這很類似于使用帶 "t" 和 "v" 參數的 jar 命令。)

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 + " " + size + " " + compressedSize);  }}

如果你用 J2SE 1.4.1 中的 jce.jar 來試驗上述的 JarDir 程序,你應該看像下面那樣的輸出 (在 ... 處應該顯示更多文件):

META-INF/MANIFEST.MF  5315  1910META-INF/4JCEJARS.SF  5368  1958META-INF/4JCEJARS.DSA  2207  1503META-INF/    0    2javax/ 0    0javax/crypto/  0    0javax/crypto/interfaces/    0    0javax/crypto/interfaces/DHKey.class   209   185javax/crypto/interfaces/DHPublicKey.class    265   215javax/crypto/interfaces/DHPrivateKey.class   267   215javax/crypto/interfaces/PBEKey.class  268   224javax/crypto/SecretKey.class  167   155...

注意輸入內容頂部包含 META-INF 的那幾行,這是 menifest 和安全驗證信息。其中大小為 0 的項不是文件,而是目錄。

要真正從 JAR 文件中讀取文件內容,你必須獲得相應條目的 InputStream。這不同于 JarEntry。JarEntry 僅包括了入口信息,卻并未包含實際的內容。這很像 File 和 FileInputSteram 的區別。只訪問 File,永遠不會打開相應的文件,它只讀取在目錄中的信息。下面告訴你如何從一個條目得到 InputStream:

復制代碼 代碼如下:
InputStream input = jarFile.getInputStream(entry);

得到輸入流之后,你只需要像讀其它流一樣讀它就行了。如果是一個文本流,要記得使用一個 Reader 來從流中獲取字符。而對于字節流,如圖片,則只好直接讀取。

下面的程序演示了從一個 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 的 JAR 文件,其中有一個名為 spider.txt 文本文件,再假設那個  pider.txt 包含如下文本:

The itsy bitsy spider Ran up the water spoutDown came the rain andWashed the spider out 

運行下面的命令以顯示 JAR 文件中該文本文件的內容:

復制代碼 代碼如下:
java JarRead myfiles.jar spider.txt

希望本文所述對大家的java程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产亚洲欧美日韩美女| 久精品免费视频| 2025国产精品视频| 亚洲欧洲一区二区三区久久| 欧美日韩亚洲视频一区| 青青青国产精品一区二区| 色999日韩欧美国产| 亚洲欧美三级在线| 欧美激情视频一区| 欧美裸体xxxx极品少妇| 日韩精品在线视频观看| 日韩女在线观看| 欧美成人午夜影院| 成人网中文字幕| 黄网站色欧美视频| 国产拍精品一二三| 久久精品电影网| 久久久久这里只有精品| 91精品久久久久久久久久久| 亚洲欧美日韩国产精品| 日韩精品在线私人| 国产精品国产自产拍高清av水多| 最好看的2019的中文字幕视频| 亚洲高清av在线| 国产日韩av在线播放| 色小说视频一区| 亚洲视频精品在线| 成人国内精品久久久久一区| 国内精品美女av在线播放| 欧美成人手机在线| 久久久精品在线观看| 日韩在线免费视频观看| 欧美高清视频一区二区| 久久久久久999| 精品久久久久久久久久久久| 国产91色在线免费| 在线观看精品国产视频| 欧美日韩不卡合集视频| 欧美日在线观看| 亚洲成人黄色在线观看| 日韩av毛片网| 国内精品小视频在线观看| 欧美野外猛男的大粗鳮| 亚洲欧美中文字幕| 欧美性猛交xxxx免费看久久久| 日韩精品免费在线视频观看| 亚洲2020天天堂在线观看| 欧美黑人一级爽快片淫片高清| 精品少妇一区二区30p| 国产精品久久久久久久久久久不卡| 久热在线中文字幕色999舞| 97色在线播放视频| 日本成人免费在线| 日韩精品黄色网| 日韩大陆欧美高清视频区| 亚洲精品按摩视频| 国产亚洲欧洲高清一区| 成人欧美一区二区三区黑人孕妇| 欧美激情视频在线观看| 成人激情视频免费在线| 久久视频在线观看免费| 日韩电影视频免费| 久久精品国产一区二区三区| 一本大道久久加勒比香蕉| 欧美亚洲成人精品| 欧美成人精品xxx| 精品国产一区二区三区久久狼黑人| 欧美精品www在线观看| 久久久www成人免费精品张筱雨| 亚洲精品乱码久久久久久按摩观| 成人深夜直播免费观看| 久久在精品线影院精品国产| 日韩av网站大全| 8x拔播拔播x8国产精品| 国产亚洲aⅴaaaaaa毛片| 亚洲激情在线观看| 久久视频免费观看| 97成人精品视频在线观看| 97在线免费观看视频| 国产69精品久久久久久| 亚洲第一区中文99精品| 国产一区二区三区在线看| 亚洲一区美女视频在线观看免费| 4438全国成人免费| 一区二区三区回区在观看免费视频| 日日摸夜夜添一区| 欧美大尺度电影在线观看| 成人午夜在线视频一区| 国产精品久久久久久久av电影| 欧美视频在线观看 亚洲欧| 亚洲a在线播放| 亚洲在线免费视频| 国产欧美精品一区二区三区介绍| 精品自拍视频在线观看| 欧美精品精品精品精品免费| 日韩av在线免费观看一区| 久久久久久伊人| 亚洲成人久久久久| 国产精品扒开腿做爽爽爽男男| 日韩激情视频在线播放| 欧美激情免费看| 亚洲高清免费观看高清完整版| 国产精品视频在线播放| 久久99久久久久久久噜噜| 亚洲精品动漫久久久久| 久久视频免费在线播放| 国产日产久久高清欧美一区| 亚洲va欧美va国产综合久久| 精品美女永久免费视频| 一区二区亚洲精品国产| 日韩av在线网| 日韩av在线免费看| 日本成人精品在线| 国自在线精品视频| 精品久久久久久| 色偷偷9999www| 欧美日本黄视频| 亚洲精品在线看| 国产精品96久久久久久又黄又硬| 日本久久91av| 日本午夜在线亚洲.国产| 久久视频在线播放| 成人精品在线观看| 国产精品免费福利| 亚洲女同性videos| 国产精品第100页| 亚洲另类激情图| 亚洲最新视频在线| 国产欧美一区二区| 精品中文字幕在线| 日韩美女视频免费在线观看| 日日狠狠久久偷偷四色综合免费| 91爱爱小视频k| 黑人精品xxx一区| 色中色综合影院手机版在线观看| 国产精品永久免费视频| 日本一区二三区好的精华液| www.日韩免费| 中国人与牲禽动交精品| 亚洲精品97久久| 久久精品国产亚洲| 欧美日韩国产精品一区二区不卡中文| 中文字幕在线亚洲| 97在线视频免费看| 久久中文精品视频| 欧美精品在线网站| 国产91在线高潮白浆在线观看| 久久九九热免费视频| 欧美美女18p| 国产精品视频久久久久| 欧美自拍大量在线观看| 国产69久久精品成人| 国产精品草莓在线免费观看| 青青草国产精品一区二区| 日韩中文字幕久久| 欧美性视频网站| 亚洲专区国产精品| 97久久国产精品| 日本精品视频网站| 日韩欧美亚洲成人| 伊人伊人伊人久久| 亚洲电影av在线| 欧美成人性色生活仑片| 国产午夜精品全部视频在线播放|