java - 在 Java 中,您可以浏览嵌套 zip 文件的内容而不膨胀父文件吗?

标签 java file-io zip

我有一个 zip 文件,其中包含 zip 文件(它们本身可能包含 zip 文件)。

parent.zip
|- child_1.zip
|  |- foo.txt
|
|- child_2.zip
|  |- bar.txt
|
|- baz.txt

使用 ZipFile,我可以获取父 zip 文件的 ZipEntries,并查看子文件(child_1.zip、child_2.zip、baz.txt),但我无法找到一种方法来检查这些子 zip 文件(foo.txt、bar.txt)的内容而不膨胀父 zip。

这可能吗,还是我需要膨胀parent.zip?

最佳答案

可以使用zip file system使用 jar:file: 协议(protocol):

            URI uri = new URI(
                "jar:file:/home/.../.../external.zip!/.../internal.zip!/");
            Map<String, ?> env = new HashMap<>();
            try (FileSystem zipfs = FileSystems.newFileSystem(uri, env)) {
                Path rootPath2 = zipfs.getPath("/");
                Files.walk(rootPath2).forEach(p -> {
                    System.out.printf("Path %s%n", p.toString());
                });
            }

对于递归遍历,必须创建带有“!/”的 URI,并自行执行递归。

使用文件可以将文件复制到zip文件系统中。 (这里我有一些疑问。)

关于java - 在 Java 中,您可以浏览嵌套 zip 文件的内容而不膨胀父文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54030188/

相关文章:

Java字数统计

java - 将 GWT 应用程序从 GAE 部署到 Tomcat

java - JPA - 无效的 persistence.xml

javascript - Windows 通用应用程序 - Javascript - 文件 IO - 如果文件已存在则崩溃

python - ZipFile 提示,有没有办法绕过使用 zipfile 模块?

Python解压文件并检查文件是否存在

java - "java.awt.EventQueue.invokeLater"或"new Myframe().setVisible(true) , What'有什么区别?

c# - 在 C# 中重命名目录

python - 在 python 3 中打印到一个空文件

java - 在 Java 中读取受密码保护的 ZIP 文件