首页 > 解决方案 > 我如何压缩包含 Java 中所有子文件夹的完整目录?

问题描述

嘿嘿!在您将其报告为重复之前:我研究了几个小时,是的,有很多关于此的网站、问题和视频,但没有一个可以帮助我。

我已经使用了不同的技术来创建一个 zip 存档,效果很好。我也可以毫无问题地从子目录中获取所有文件。但问题是我只列出了所有文件,没有它们的目录。如果我有

/something/somethingelse/text1.txt 和 /something/somethingother/lol.txt

我希望它完全像那样显示在 zip 文件夹中。

在 zip 文件夹中应该有 2 个文件夹 somethingelse 和 somethingother,包含它们的文件。对于我找到的所有版本,它会将所有文件和其他子文件夹中的所有文件直接放入 zip 中,所以当我点击它时,.zip它只会显示text1.txtlol.txt,没有任何文件夹。

有没有一种方法可以处理.zip所有知名的压缩文件程序?

我只想压缩目录并保留以前的所有内容,只需打包到一个 zip 存档中。

我用我的java水平尝试了所有我能做的事情,还尝试了一些在线版本,没有任何结果可以达到我想要的结果。

标签: javazip

解决方案


干得好:

private static void zipFolder(Path sourceFolderPath, Path zipPath) throws Exception {
   ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipPath.toFile()));
   Files.walkFileTree(sourceFolderPath, new SimpleFileVisitor<Path>() {
       public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
           zos.putNextEntry(new ZipEntry(sourceFolderPath.relativize(file).toString()));
           Files.copy(file, zos);
           zos.closeEntry();
           return FileVisitResult.CONTINUE;
        }
    });
    zos.close();
 }

./ 压缩

./somethigelse/ 第一个文件夹

./别的东西/ 第二个文件夹


推荐阅读