Truezip - Comment décompresser les fichiers JAR / ZIP intérieurs sans les étendre sous forme de répertoires?

StackOverflow https://stackoverflow.com/questions/6393090

  •  29-10-2019
  •  | 
  •  

Question

Je crée un fichier TZP à l'aide de Truezip 7 et de la méthode CP_RP pour ajouter tous les contenus du répertoire à la fois au fichier TZP.

Après cela, j'essaie d'extraire tous les contenus du fichier TZP dans un répertoire cible. Cependant, l'appel:

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);
    }
  }
}

Échoue avec une erreur: java.io.ioexception: [path] test.zip myjar.jar (la destination existe déjà). Si j'utilise CP au lieu de MV, alors l'erreur est path] test.zip myjar.jar (contenu dans [path] test.zip myjar.jar)

Le problème semble également être que Truezip identifie les zips et les pots comme répertoires et archives, donc lorsque vous faites un isdirectory () sur eux, cela réussit et faire un listFiles () renvoie tous les fichiers contenus, donc exécuter un CP () sur Les fichiers provoquent la copie de tous les contenus JAR / ZIP en tant que répertoires.

Quelle est la bonne façon d'extraire ces fichiers d'archives sans les étendre?

Était-ce utile?

La solution

L'extraction d'un fichier d'archive dans un répertoire peut être effectuée avec un seul appel de méthode:

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

L'astuce consiste à utiliser TarchiveDetector.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top