在 java 中使用 GZIPOutputStream 或 ZIPOutputStream 时是否可以排除文件 and/or 目录?
Is it possible to exclude files and/or directories when using GZIPOutputStream or ZIPOutputStream in java?
我正在尝试存档文件夹根目录中的所有文件,但将备份作为根目录中的一个文件夹,因此我想将其排除,这样第一个备份之后的每个备份都不会备份在 java 中增加备份文件夹(也就是以指数方式增加存档的大小),如果不能使用 GZIPOutputStream 或 ZIPOutputStream,你能推荐我一种备份文件的替代方法,允许排除文件 and/or备份目录?感谢阅读!
要从 Zip 或 GZip 中排除某些文件或文件夹,您有两个选择:
- 遍历所有 files/folders 并排除任何您不想包含在 zip 中的 files/folders。
- 使用类似 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:
)。
您可以看到,也可以排除完整的文件夹,而不仅仅是文件。但是 file/folder 的完整(或相对)路径是必需的!
编辑: 不仅文档缺少 filesToExclude
列表定义,而且 absolute 路径也不清楚所有 new File()
电话的要求。更新答案以反映这一点。您需要使用绝对路径或相对路径。相对路径由 .
前缀构成。
当前示例已经过测试并正在 Windows 10.
上工作
我正在尝试存档文件夹根目录中的所有文件,但将备份作为根目录中的一个文件夹,因此我想将其排除,这样第一个备份之后的每个备份都不会备份在 java 中增加备份文件夹(也就是以指数方式增加存档的大小),如果不能使用 GZIPOutputStream 或 ZIPOutputStream,你能推荐我一种备份文件的替代方法,允许排除文件 and/or备份目录?感谢阅读!
要从 Zip 或 GZip 中排除某些文件或文件夹,您有两个选择:
- 遍历所有 files/folders 并排除任何您不想包含在 zip 中的 files/folders。
- 使用类似 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:
)。
您可以看到,也可以排除完整的文件夹,而不仅仅是文件。但是 file/folder 的完整(或相对)路径是必需的!
编辑: 不仅文档缺少 filesToExclude
列表定义,而且 absolute 路径也不清楚所有 new File()
电话的要求。更新答案以反映这一点。您需要使用绝对路径或相对路径。相对路径由 .
前缀构成。
当前示例已经过测试并正在 Windows 10.