如何使用java压缩文件夹本身

2022-08-31 12:48:41

假设我有以下目录结构。

D:\reports\january\

在一月份,假设有两个excel文件说A.xls和B.xls。有很多地方已经写了关于如何使用压缩文件。但是我想将一月份文件夹本身压缩在报告文件夹中,以便一月份一月份.zip都将出现在报告内部。(这意味着当我解压缩一月.zip文件时,我应该得到一月文件夹)。java.util.zip

任何人都可以向我提供代码来执行此操作。请让我知道通过使用其他库是否可以更轻松地完成此操作。java.util.zip

多谢。。。


答案 1

你试过零圈拉链库吗?真的很整洁!压缩文件夹只是一个衬里:

ZipUtil.pack(new File("D:\\reports\\january\\"), new File("D:\\reports\\january.zip"));

(感谢Oleg Šelajev的例子)


答案 2

下面是 Java 8+ 示例:

public static void pack(String sourceDirPath, String zipFilePath) throws IOException {
    Path p = Files.createFile(Paths.get(zipFilePath));
    try (ZipOutputStream zs = new ZipOutputStream(Files.newOutputStream(p))) {
        Path pp = Paths.get(sourceDirPath);
        Files.walk(pp)
          .filter(path -> !Files.isDirectory(path))
          .forEach(path -> {
              ZipEntry zipEntry = new ZipEntry(pp.relativize(path).toString());
              try {
                  zs.putNextEntry(zipEntry);
                  Files.copy(path, zs);
                  zs.closeEntry();
            } catch (IOException e) {
                System.err.println(e);
            }
          });
    }
}

推荐