2010-03-08 49 views
3

是否有遞歸壓縮ZIP目錄的簡單方法,該目錄可能包含或不包含任何數量的文件和任意數目的子目錄級別?以遞歸方式壓縮包含任意數量的Java文件和子目錄的目錄?

+1

我檢查阿帕奇百科全書壓縮,和它的不存在。奇; 「使一個zip文件不在這個目錄中」似乎很常見的功能。 – 2010-03-08 18:54:37

+0

僅供參考:您可以在DotNetZip中使用'ZipFile.AddDirectory();' – Cheeso 2010-03-08 22:36:36

回答

-2

我在ruby中使用ZipFileSystem實現取得了巨大成功,儘管我從未在java中使用它。你可能想看看this出:

+0

答案中的鏈接已死(404未找到)。 – Pang 2016-01-13 03:16:08

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

適用於我,但由於某種神祕原因,還會將「[email protected]」這樣的文件添加到存檔中。任何想法我做錯了什麼? – 2017-10-02 11:29:46

相關問題