2010-06-03 8 views
2

Quelqu'un a-t-il de l'expérience avec la bibliothèque TrueZip java? J'essaie de faire ce qui devrait être une tâche simple, décompresser une archive qui contient des sous-dossiers, et jusqu'à présent je n'ai pas réussi à la faire fonctionner.TrueZip récursif décompresser?

(La raison pour laquelle j'utilise TrueZip est à cause de la encoding foreign character bug dans les méthodes de java.util.zip)

En regardant l'API, il semble que file.archiveCopyAllTo() est leur méthode « dézipper ». Cependant, le code ci-dessous ne fonctionne que si mon archive est plate et ne contient que des fichiers. Il échoue s'il y a des sous-dossiers.

private static void testUnzip(String zipPath, File unzipFolder) 
{ 
    de.schlichtherle.io.File zipFile = new de.schlichtherle.io.File(zipPath); 
    boolean result = zipFile.archiveCopyAllTo(unzipFolder); 
    System.out.println("UNZIP RESULT: " + result); 
} 

Ou si quelqu'un sait un autre moyen pour décompresser les archives avec possibles caractères non-ASCII dans les noms de fichiers, ce serait génial aussi ... merci!

EDIT: J'ai abandonné l'utilisation de TrueZIP. J'ai été capable d'utiliser org.apache.tools.zip pour extraire des fichiers avec des caractères non-ASCII dans les noms de fichiers. Cette API est plus logique pour moi aussi ...

+0

ugh, ils ont leur propre classe de fichier? Cela me rendrait confus à la mort. –

+0

Vous pouvez essayer ce 'zipFile.archiveCopyAllTo (unzipFolder, ArchiveDetector.DEFAULT, ArchiveDetector.NULL);' – cubanacan

+0

Si cela ne vous aide pas, alors vous devriez utiliser TrueZIP 6 ou version ultérieure, qui ne décompressez récursivement qu'avec juste votre code. – cubanacan

Répondre

1

dans ma demande je dû ajouter

de.schlichtherle.io.File.umount(zipFile); 

comme la dernière déclaration pour voir le résultat, il semble que (au moins) une version de caches de truezip le zip entier et écrit sur le disque uniquement pendant la méthode umount.

HTH