Java 從 JAR 檔案讀取資料完整範例。本站提醒廣大學習愛好者:此文章僅供參考,不一定能完全符合您的需求。以下是完整範例正文
本文範例說明從 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 檔案。你要用到的類別都在 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 檔案中取得它的屬性、身份驗證資訊和其他資訊,如條目的名稱和大小。
Enumeration enum = jarFile.entries();
while (enum.hasMoreElements()) {
process(enum.nextElement());
}
每一個條目都是一個 JarEntry。這個類別有一些諸如 getName、getSize 和 getCompressedSize 的方法。
完整程式碼範例:列出 JAR 內容、讀取 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);
}
}
讀取 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();
}
}
希望本文所述對大家的 Java 程式設計有所幫助。