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中)

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

在不扩展归档文件的情况下提取这些归档文件的正确方法是什么?

将归档文件提取到目录可以通过一个方法调用完成:

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

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

最新更新