我想讀取.7z壓縮文件中的文件。我不希望它被提取到本地系統。但在Java緩衝區中,我需要讀取文件的所有內容。有什麼辦法嗎?如果是的話,你可以提供代碼的例子嗎?如何讀取.7z擴展名文件中的文件的內容
場景:
主要文件 - TestFile.7z
內TestFile.7z
文件是First.xml, Second.xml, Third.xml
我想讀First.xml
無需解壓它。
我想讀取.7z壓縮文件中的文件。我不希望它被提取到本地系統。但在Java緩衝區中,我需要讀取文件的所有內容。有什麼辦法嗎?如果是的話,你可以提供代碼的例子嗎?如何讀取.7z擴展名文件中的文件的內容
場景:
主要文件 - TestFile.7z
內TestFile.7z
文件是First.xml, Second.xml, Third.xml
我想讀First.xml
無需解壓它。
7zip的具有讀取7z格式文件的Java API:http://www.7-zip.org/sdk.html
可以使用Apache Commons Compress library。該庫支持多種檔案格式的打包和解包。要使用7z格式,您還必須將xz-1.4.jar
放入類路徑中。這裏是XZ for Java sources。您可以從Maven Central Repository下載XZ binary。
下面是一個小例子,用於讀取7z存檔的內容。
public static void main(String[] args) throws IOException {
SevenZFile archiveFile = new SevenZFile(new File("archive.7z"));
SevenZArchiveEntry entry;
try {
// Go through all entries
while((entry = archiveFile.getNextEntry()) != null) {
// Maybe filter by name. Name can contain a path.
String name = entry.getName();
if(entry.isDirectory()) {
System.out.println(String.format("Found directory entry %s", name));
} else {
// If this is a file, we read the file content into a
// ByteArrayOutputStream ...
System.out.println(String.format("Unpacking %s ...", name));
ByteArrayOutputStream contentBytes = new ByteArrayOutputStream();
// ... using a small buffer byte array.
byte[] buffer = new byte[2048];
int bytesRead;
while((bytesRead = archiveFile.read(buffer)) != -1) {
contentBytes.write(buffer, 0, bytesRead);
}
// Assuming the content is a UTF-8 text file we can interpret the
// bytes as a string.
String content = contentBytes.toString("UTF-8");
System.out.println(content);
}
}
} finally {
archiveFile.close();
}
}
雖然Apache的百科全書壓縮庫作品上面做廣告,我發現它是爲任何實質性大小的文件unusably慢 - 雷人圍繞GB或更多。我必須從Java調用一個本地命令行7z.exe來處理至少快10倍的大圖像文件。
我用jre1.7。也許事情會改善的更高版本的JRE。
也許你可以包含一些說明如何使用這個API的代碼。 – 2014-02-24 11:48:04
感謝您的快速解答。我會嘗試一下,讓你們知道。 – LakshmiNarayana
我無法從您提供的鏈接中使用完整的代碼。 – LakshmiNarayana