2011-06-18 16 views
2

我使用TrueZip 7創建了tzp文件,並使用cp_rp方法將所有目錄內容一次添加到tzp文件。TrueZip - 如何解壓縮內部的jar/zip文件而不將它們擴展爲目錄?

之後,我試圖將tzp文件的所有內容提取到目標目錄。然而,呼叫:

出錯而失敗:java.io.IOException的:[路徑] \ test.zip \ Myjar.jar(目標已經存在)。如果我使用CP代替MV,則誤差是[路徑] \ test.zip \ Myjar.jar(包含在[路徑] \ test.zip \ Myjar.jar)

問題似乎也TrueZip將zips和jars識別爲目錄和存檔,因此在對它們執行isDirectory()時,它會成功,並且執行listFiles()將返回其中包含的所有文件,因此遞歸地在文件上運行cp()會導致所有jar /將壓縮內容複製爲目錄。

提取這些檔案文件時不擴展它們的正確方法是什麼?

+0

你當然會意識到,基礎Java JVM中內置了zip支持 - java.util.zip。這些作品讓您可以查看zip文件內容並提取單個文件。 –

回答

5

提取的存檔文件的目錄可以用一個方法調用來完成:

TFile archive = new TFile("archive.zip"); 
TFile directory = new TFile("directory"); 
TFile.cp_rp(archive, directory, TArchiveDetector.NULL, TArchiveDetector.NULL); 

訣竅是遍歷目錄樹時使用TArchiveDetector.NULL。

+0

有什麼辦法可以逐一提取?問題是我需要在提取文件時對文件執行一些檢查。 – Dan

+0

這取決於支票的類型。如果是CRC-32檢查,那麼你可以使用CheckedZipDriver而不是ZipDriver。那麼你不必改變這個代碼。否則,你不得不自己遍歷並使用TFile.cp_p(*)而不是TFile.cp_rp(*)。 –

+0

當我使用File對象或字符串創建'TFile目錄'時,我得到相同的'IOException',即目錄的路徑是「不是文件」。 – Paul

相關問題