2015-10-20 302 views
4

我想預覽.7z壓縮的內容,而與Java提取,所以我試圖用阿帕奇百科全書壓縮:預覽.7z壓縮內容和子文件夾,而不提取

public static void main(String[] args) { 
    try { 
     SevenZFile sevenZFile = new SevenZFile(new File("C://test.7z")); 
     SevenZArchiveEntry entry; 
     while ((entry = sevenZFile.getNextEntry()) != null) { 
      System.out.println("Name: " + entry.getName()); 
      System.out.println("Size : " + entry.getSize()); 
      System.out.println("--------------------------------"); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

它的工作原理,但我想還預覽文件到其他的7z壓縮或從原來的7Z:

test.7z 
--- file1.txt 
--- otherInner.7z 
    ---- innerFile1.txt 
    ---- innerFile2.txt 

是否有一個平均要做到這一點而不提取7Z? 感謝您的幫助。

+1

我不確定,但我認爲它不應該是可能的,因爲sub 7zip文件是壓縮的,所以7zip需要解壓縮它來分析裏面的內容。 – jaudo

+0

這是我的意見,但我不知道...謝謝你的回答 –

回答

1

的種類。你的意思是沒有提取外部7z?是。沒有提取內部7z?編號

它看起來像Apache Commons SevenZ只適用於File對象,所以您將不得不提取內部7z文件然後解碼。

一旦你有entry你想你可以從字節數組中讀取該條目的字節。然後,你可以寫這些字節的(臨時)文件,然後創建一個新SevenZFile對象分析的..

此代碼主要是從Apache Common Compress Examples page採取:

SevenZFile sevenZFile =... 
SevenZArchiveEntry entry... 

...found our entry we want... 
byte[] content = new byte[entry.getSize()]; 
LOOP UNTIL entry.getSize() HAS BEEN READ { 
    sevenZFile.read(content, offset, content.length - offset); 
} 

現在,我們有我們的存儲在byte[]中的壓縮字節,我們必須將它寫出到一個文件中,然後我們可以使用另一個SeventZFile實例解壓縮它。

您可能會跳過中間字節[],而是直接讀取和寫入臨時文件,但無論如何,您必須在某處創建臨時文件。

+0

是的dkatzel,它沒有提取外部和內部7z ...感謝您的詳細解答 –

相關問題