当我调用时:
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文件?
答案 0 :(得分:1)
问题是,一旦调用了File.createTempFile(*),目标归档文件就已作为空文件存在,TrueZIP内核将其视为误报归档文件。根据这个逻辑,您对TFile.cp_rp(*)的后续调用尝试以递归方式将虚拟目录复制到普通文件,这无法正常工作。
要使代码正常工作,只需在File.createTempFile(*)返回的对象上调用File.delete()即可。然后你的代码的其余部分可以工作。
答案 1 :(得分:0)
我没有使用过TrueZip,但是对API文档的快速扫描让我得出结论,你不能以这种方式使用TFile
。 TFile
对象表示存档的单个成员。如果要复制所有成员,则必须自己迭代输入成员并复制每个成员。
可能有一个API来处理整个档案,但我没有看到它。