【问题标题】:Is it possible to exclude files and/or directories when using GZIPOutputStream or ZIPOutputStream in java?在 java 中使用 GZIPOutputStream 或 ZIPOutputStream 时是否可以排除文件和/或目录?
【发布时间】:2020-09-28 16:21:40
【问题描述】:

我正在尝试归档文件夹根目录中的所有文件,但将备份作为根目录中的文件夹之一,所以我想排除它,因此第一个备份之后的每个备份都不会备份java 中的 backups 文件夹(又名以指数方式增加存档的大小),如果 GZIPOutputStream 或 ZIPOutputStream 无法使用,您能否推荐我一种备份文件的替代方法,该方法允许从备份中排除文件和/或目录?感谢您的阅读!

【问题讨论】:

  • 如果您不想自己遍历所有文件,从而能够排除某些文件/文件夹,您可以尝试zip4j。该软件包允许您使用过滤器排除文件。
  • 您能否将其添加为答案,以便我将其标记为解决方案?还是你要我引用你的话然后点击“回答你的问题”按钮?

标签: java zipoutputstream gzipoutputstream


【解决方案1】:

要能够从 Zip 或 GZip 中排除某些文件或文件夹,您有两种选择:

  1. 遍历所有文件/文件夹并排除您不希望在 zip 中包含的任何文件/文件夹。
  2. 使用像zip4j 这样的压缩包。这允许您使用过滤器排除某些文件。
List<File> filesToExclude = Arrays.asList(new File("/full/path/to/folder_to_add/sample.pdf"), new File("/full/path/to/folder_to_add/subfolder/sample_2.txt"), new File("/full/path/to/folder_to_add/subfolder_to_exclude"));
ExcludeFileFilter excludeFileFilter = filesToExclude::contains;
ZipParameters zipParameters = new ZipParameters();
zipParameters.setExcludeFileFilter(excludeFileFilter);
new ZipFile("filename.zip").addFolder(new File("/full/path/to/folder_to_add"), zipParameters); // On Windows you need to include drive letter as well

不要忘记在 Windows 系统上包含驱动器号(即:C:)。

您可以看到也可以排除完整的文件夹,而不仅仅是文件。但是文件/文件夹的完整(或相对)路径是必需的!

编辑: 不仅文档缺少filesToExclude 列表定义,而且还不清楚所有new File() 调用的absolute 路径要求。更新答案以反映这一点。您需要使用绝对路径或相对路径。相对路径是用 . 前置的。 当前示例已在 Windows 10 上测试并运行。

【讨论】:

  • 我尝试了多种类型,但找不到任何适用于“filesToExclude”(字符串、文件、CharSequence 等)的类型,您知道变量“filesToExclude”的类型吗假设是,自述文件从未提及他们用于“filesToExclude”的类型
  • @JordanPlayz158 似乎该部分已从自述文件中删除,是的,我已经更新了我的答案。 List&lt;File&gt; filesToExclude = Arrays.asList(new File("sample.pdf"), new File("sample_2.txt"));。你能检查一下这是否有效吗?
  • 在尝试了许多不同的事情之后,遗憾的是它似乎不起作用。
  • @JordanPlayz158 我又更新了。我也没想到,但是您需要包含要压缩的文件夹以及要排除的文件/文件夹的完整文件路径。当前示例在 Windows 10 上进行了测试并且运行良好。
  • 嗯,我不相信你需要绝对路径,因为我试图用“。”来压缩东西。它压缩了运行 jar 的根目录中的所有内容。编辑:是的,刚刚测试过,你可以使用“。”用于相对 jar 路径和排除文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-09
  • 1970-01-01
相关资源
最近更新 更多