从 Java 中的超大 Zip 文件读取小文件的有效方法

Efficient way to read a small file from a very large Zip file in Java

我想知道是否有任何有效的方法可以从非常大的 zip 文件中读取小文件。除了一个名为 inventory.xml.

的小文件外,我对 zip 中的任何其他文件都不感兴趣

确切地说,zip 文件位于 artifactory 中。所以我也不想将整个文件下载到我的磁盘中。这是我现在拥有的。

URL url = new URL("artifactory-url");
    HttpURLConnection con = (HttpURLConnection) url.openConnection();
    con.setRequestMethod("GET");
    int status = con.getResponseCode();
    if (status != 200) {
        System.out.println("Unable to find the artifact : " + url.toString());
        return bugs;
    }
    try (ZipInputStream zipStream = new ZipInputStream(con.getInputStream())) {
        ZipEntry entry;
        while ((entry = zipStream.getNextEntry()) != null) {
            if (entry.getName().contains("inventory.xml")) {
                //do something here
            }

        }
    }

另一个问题是,如果我知道文件的坐标,会有帮助吗?

ZIP 文件将它们的目录存储在文件的末尾,因此如果您可以通过某种方式随机访问文件的内容,您可以这样做。

但是,这是一个很大的“如果”:它需要 Artifactory 支持字节范围的 GET,并且需要您重新实现(或 find/adapt)读取目录结构和检索文件的代码从存档的中间开始。

如果您需要经常执行此操作,更好的解决方案是首先更改将这些文件放入 Artifactory 的过程。如果它打包在由 Maven 或其他构建工具生成的 JAR 中,那么将文件提取到它们自己的依赖项中是一件简单的事情。

正如你们许多人提到的,问题中提到的代码本身可能是最有效的解决方案。无论如何,谢谢你的帮助。