2012-02-13 50 views
1

當我調用:使用TrueZip將.tar.gz文件轉換爲.zip?

File input = new File("cmake.tar.gz"); 
TFile sourceFile = new TFile(input); 
TFile targetFile = new TFile(File.createTempFile("cmake", ".zip")); 
try 
{ 
    TFile.cp_rp(sourceFile, targetFile, TArchiveDetector.NULL); 
} 
finally 
{ 
    TFile.umount(targetFile); 
} 

我得到:

java.io.IOException: C:\Users\Gili\AppData\Local\Temp\cmake4527983120069708378.zip (not a directory) 
     at de.schlichtherle.truezip.file.TBIO.cp_r0(TBIO.java:163) 
     at de.schlichtherle.truezip.file.TBIO.cp_r(TBIO.java:142) 
     at de.schlichtherle.truezip.file.TFile.cp_rp(TFile.java:3364) 
     at com.googlecode.cmakemavenproject.GetBinariesMojo.download(GetBinariesMojo.java:275) 

我怎麼能指示TrueZip創建包含.tar.gz文件的內容,新的.zip文件?

回答

1

問題在於,一旦調用File.createTempFile(*),目標歸檔文件就會作爲空文件存在,TrueZIP內核會將其視爲假正面歸檔文件。根據這個邏輯,你對TFile.cp_rp(*)的後續調用將遞歸地將一個虛擬目錄複製到一個無法工作的普通文件中。

爲了讓你的代碼工作,只需File.createTempFile(*)返回的對象上調用File.delete()。其餘的代碼應該可以工作。

0

我沒有用TrueZip,但API文檔的快速掃描使我得出結論,你不能以這種方式使用TFile。甲TFile對象表示一個存檔的單個構件。如果您想複製所有成員,則必須自行遍歷輸入成員並複製每個成員。

有可能是處理整個檔案的API,但我沒有看到它。

+0

當然可以,但實際上,我怎麼創建一個檔案將文件添加到? – Gili 2012-02-13 20:44:16

+0

我相信當你打開成員在爲寫而被創建。 – 2012-02-13 22:02:27

+0

對不起,沒有。 TFile對象可以尋址虛擬文件系統空間中的任何實體,例如一個普通文件,一個普通特殊文件,一個普通目錄或歸檔文件中的任何虛擬變體。 – 2012-02-16 13:04:49