Рекурсивно ZIP каталог, содержащий любое количество файлов и подкаталогов в Java? - PullRequest
3 голосов
/ 08 марта 2010

Существует ли простой способ рекурсивного архивирования каталога, который может содержать или не содержать любое количество файлов и любое количество уровней подкаталогов?

Ответы [ 3 ]

10 голосов
/ 20 мая 2013
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();
            }
        }
    }
}
1 голос
0 голосов
/ 08 марта 2010

Я с большим успехом использую реализацию ZipFileSystem в ruby, хотя никогда не использовал ее в java. Вы можете проверить это :

...