我正在尝试存档文件夹根目录中的所有文件,但将备份作为根目录中的文件夹之一,所以我想排除它,因此第一个备份之后的每个备份都不会备份备份文件夹(又名以指数方式增加存档的大小)在java中,如果GZIPOutputStream或ZIPOutputStream不可能,你能推荐我一种替代方法来备份允许从备份中排除文件和/或目录的文件吗?感谢您的阅读!
问问题
460 次
1 回答
1
为了能够从 Zip 或 GZip 中排除某些文件或文件夹,您有两种选择:
- 循环遍历所有文件/文件夹并排除您不想在 zip 中包含的任何文件/文件夹。
- 使用zip4j 之类的 zip 包。这允许您使用过滤器排除某些文件。
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
不要忘记C:
在 Windows 系统上包含驱动器号(即:)。
您可以看到也可以排除完整的文件夹,而不仅仅是文件。但是文件/文件夹的完整(或相对)路径是必要的!
编辑:文档不仅缺少filesToExclude
列表定义,而且还不清楚所有调用的绝对路径要求。new File()
更新答案以反映这一点。您需要使用绝对路径或相对路径。相对路径是用.
前置的。当前示例已在 Windows 10 上进行测试并运行。
于 2020-09-29T13:02:49.810 回答