2010-03-08 2 views
3

Existe-t-il un moyen facile de ZIP récursif un répertoire qui peut contenir ou non un nombre de fichiers et un nombre quelconque de niveaux de sous-répertoires?Récursivement ZIP un répertoire contenant un nombre quelconque de fichiers et sous-répertoires en Java?

+1

j'ai vérifié Apache Commons Compress, et ce n'est pas là. Impair; "faire un fichier zip en dehors de ce répertoire" semble être une fonctionnalité assez commune. –

+0

FYI: Vous pouvez le faire dans DotNetZip avec 'ZipFile.AddDirectory();' – Cheeso

Répondre

-2

J'utilise l'implémentation de ZipFileSystem dans ruby ​​avec beaucoup de succès, même si je ne l'ai jamais utilisé dans java. Vous pouvez vérifier this sur:

+0

Le lien dans la réponse est mort (404 Introuvable). – Pang

10
public final class ZipFileUtil { 
    public static void zipDirectory(File dir, File zipFile) throws IOException { 
     FileOutputStream fout = new FileOutputStream(zipFile); 
     ZipOutputStream zout = new ZipOutputStream(fout); 
     zipSubDirectory("", dir, zout); 
     zout.close(); 
    } 

    private static void zipSubDirectory(String basePath, File dir, ZipOutputStream zout) throws IOException { 
     byte[] buffer = new byte[4096]; 
     File[] files = dir.listFiles(); 
     for (File file : files) { 
      if (file.isDirectory()) { 
       String path = basePath + file.getName() + "/"; 
       zout.putNextEntry(new ZipEntry(path)); 
       zipSubDirectory(path, file, zout); 
       zout.closeEntry(); 
      } else { 
       FileInputStream fin = new FileInputStream(file); 
       zout.putNextEntry(new ZipEntry(basePath + file.getName())); 
       int length; 
       while ((length = fin.read(buffer)) > 0) { 
        zout.write(buffer, 0, length); 
       } 
       zout.closeEntry(); 
       fin.close(); 
      } 
     } 
    } 
} 
+0

Fonctionne bien pour moi, mais, pour une raison mystérieuse, ajoute également des fichiers comme '[email protected]' à l'archive. Une idée de ce que je fais mal? –

Questions connexes