java - 我如何压缩包含 Java 中所有子文件夹的完整目录?
问题描述
嘿嘿!在您将其报告为重复之前:我研究了几个小时,是的,有很多关于此的网站、问题和视频,但没有一个可以帮助我。
我已经使用了不同的技术来创建一个 zip 存档,效果很好。我也可以毫无问题地从子目录中获取所有文件。但问题是我只列出了所有文件,没有它们的目录。如果我有
/something/somethingelse/text1.txt 和 /something/somethingother/lol.txt
我希望它完全像那样显示在 zip 文件夹中。
在 zip 文件夹中应该有 2 个文件夹 somethingelse 和 somethingother,包含它们的文件。对于我找到的所有版本,它会将所有文件和其他子文件夹中的所有文件直接放入 zip 中,所以当我点击它时,.zip
它只会显示text1.txt
和lol.txt
,没有任何文件夹。
有没有一种方法可以处理.zip
所有知名的压缩文件程序?
我只想压缩目录并保留以前的所有内容,只需打包到一个 zip 存档中。
我用我的java水平尝试了所有我能做的事情,还尝试了一些在线版本,没有任何结果可以达到我想要的结果。
解决方案
干得好:
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();
}
推荐阅读
- makefile - 如何保持 Makefile 运行但仍保持错误代码?
- mongodb - MongoDB - 如何像在关系数据库中一样执行连接
- reactjs - React + Typescript 样式的组件 themeProvider 道具打字问题
- r - 无法重新安装或运行 Stringr 包
- dataframe - 这个用例可以通过spark的滞后/任何其他功能来完成吗,如果可以的话怎么做
- mongodb - 如何使用猫鼬在数组文档的对象中查找和更新数组
- spring-boot - 使用 springdoc-openapi 在 swagger 文档中禁用 WADL 端点生成
- react-native - React Native Touchable Opacity OnPress 在 Android 上不起作用
- spring-boot - 为 JSON 创建一个实例并访问 Kotlin 中的值
- javascript - 需要帮助从 API 获取响应