2

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 (destination exists already)というエラーで失敗します。mv の代わりに cp を使用すると、エラーは[path]\test.zip\Myjar.jar ([path]\test.zip\Myjar.jar に含まれる) になります。

問題は、TrueZip が zip と jar をディレクトリとアーカイブの両方として識別することでもあるようです。したがって、それらに対して isDirectory() を実行すると、これは成功し、listFiles() を実行すると、その中に含まれるすべてのファイルが返されるため、cp() を実行するとfiles を再帰的に使用すると、すべての jar/zip コンテンツがディレクトリとしてコピーされます。

これらのアーカイブ ファイルを展開せずに抽出する正しい方法は何ですか?

4

1 に答える 1

5

ディレクトリへのアーカイブ ファイルの抽出は、1 つのメソッド呼び出しで実行できます。

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

秘訣は、ディレクトリ ツリーをトラバースするときに TArchiveDetector.NULL を使用することです。

于 2011-06-18T07:29:06.927 に答える