2014-02-24 100 views
2

我想讀取.7z壓縮文件中的文件。我不希望它被提取到本地系統。但在Java緩衝區中,我需要讀取文件的所有內容。有什麼辦法嗎?如果是的話,你可以提供代碼的例子嗎?如何讀取.7z擴展名文件中的文件的內容

場景:

主要文件 - TestFile.7z

TestFile.7z文件是First.xml, Second.xml, Third.xml

我想讀First.xml無需解壓它。

回答

0

7zip的具有讀取7z格式文件的Java API:http://www.7-zip.org/sdk.html

+3

也許你可以包含一些說明如何使用這個API的代碼。 – 2014-02-24 11:48:04

+0

感謝您的快速解答。我會嘗試一下,讓你們知道。 – LakshmiNarayana

+0

我無法從您提供的鏈接中使用完整的代碼。 – LakshmiNarayana

1

可以使用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(); 
    } 
} 
1

雖然Apache的百科全書壓縮庫作品上面做廣告,我發現它是爲任何實質性大小的文件unusably慢 - 雷人圍繞GB或更多。我必須從Java調用一個本地命令行7z.exe來處理至少快10倍的大圖像文件。

我用jre1.7。也許事情會改善的更高版本的JRE。

相關問題