TrueZip – 如何解压缩内部jar / zip文件而不将它们扩展为目录?

我正在使用TrueZip 7创建一个tzp文件,并使用cp_rp方法将所有目录内容一次性添加到tzp文件中。

之后,我正在尝试将tzp文件的所有内容提取到目标目录。 但是,电话:

zipFile = new TFile("test.zip"); public void extract(TFile file){ for (TFile iFile : zipFile.listFiles()){ if(iFile.isDirectory()){ extract(iFile); }else{ File output = new File(iFile.getPath()); iFile.mv(output); } } } 

失败并显示错误: java.io.IOException:[path] \ test.zip \ Myjar.jar(目标已存在) 。 如果我使用cp而不是mv,那么错误是[path] \ test.zip \ Myjar.jar(包含在[path] \ test.zip \ Myjar.jar中)

问题似乎也是TrueZip将zip和jar识别为目录和档案,所以当对它们执行isDirectory()时,这会成功,并且执行listFiles()会返回其中包含的所有文件,因此运行cp()on文件递归导致所有jar / zip内容被复制为目录。

提取这些存档文件而不扩展它们的正确方法是什么?

可以使用一个方法调用将存档文件提取到目录:

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

诀窍是在遍历目录树时使用TArchiveDetector.NULL。