且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何在Java中压缩文件和文件夹?

更新时间:2023-09-26 09:39:52

不能使用java的zip库以更简单的方式压缩文件夹 - 压缩此文件夹。

The zip libraries for java cannot be used to compress folders in simpler way like - compress this folder.

如果输入是文件夹或文件,则需要自己进行测试。如果是文件 - 将其添加到zip。如果是文件夹 - 迭代文件夹并将每个文件添加到zip。对于子文件夹来说是一样的。要向Zip添加多个文件,您需要为每个文件创建ZipEntry。

You need to do the test if the input is folder or file by yourself. If it is a file - add it to the zip. If it is a folder - iterate the folder and add each file to the zip. For the subfolders to the same. To add more than one file to the Zip you need to create ZipEntry for each file.

您可以尝试这个适合我的代码:

You can try this code which works for me:

public static void zip(File directory, File zipfile) throws IOException {
    URI base = directory.toURI();
    Deque<File> queue = new LinkedList<File>();
    queue.push(directory);
    OutputStream out = new FileOutputStream(zipfile);
    Closeable res = out;
    try {
        ZipOutputStream zout = new ZipOutputStream(out);
        res = zout;
        while (!queue.isEmpty()) {
            directory = queue.pop();
            for (File kid : directory.listFiles()) {
                String name = base.relativize(kid.toURI()).getPath();
                if (kid.isDirectory()) {
                    queue.push(kid);
                    name = name.endsWith("/") ? name : name + "/";
                    zout.putNextEntry(new ZipEntry(name));
                } else {
                    zout.putNextEntry(new ZipEntry(name));
                    copy(kid, zout);
                    zout.closeEntry();
                }
            }
        }
    } finally {
        res.close();
    }
}