java - 在 java 中遍历 tar.gz

标签 java

<分区>

我有一个包含大量小 xml 文件(略小于 1.5m)(无子目录)的 tar.gz 文件。 现在我想遍历那些,我正在尝试使用 apache commons compress 来实现它。我不想像在类似主题中经常看到的那样将任何内容输出或写入新文件。我只想逐步阅读信息(完美的是能够在一个点停止并继续程序的另一次运行,但这是次要的)。

所以对于初学者来说,我认为我应该从类似的东西开始(计数器只是为了测试目的而存在以减少时间):

public static void readTar(String in) throws IOException {
    try (TarArchiveInputStream tarArchiveInputStream =
                 new TarArchiveInputStream(
                         new BufferedInputStream(
                                 new GzipCompressorInputStream(
                                         new FileInputStream(in))))){
        TarArchiveEntry entry;
        int counter = 0;
        while ((entry = tarArchiveInputStream.getNextTarEntry()) != null && counter < 1000) {
            counter++;
            System.out.println(entry.getFile());
        }
    }
}

但是entry.getFile()的结果总是null,所以我不能处理它的内容,而entry.getName() 返回预期结果。

如果有人能指出我的错误,我会很高兴。

最佳答案

getFile 方法的解释基本上是说它对从存档中读取的条目没有用。

https://commons.apache.org/proper/commons-compress/apidocs/org/apache/commons/compress/archivers/tar/TarArchiveEntry.html#getFile--

我相信你需要使用“阅读”:

https://commons.apache.org/proper/commons-compress/javadocs/api-1.18/org/apache/commons/compress/archivers/tar/TarArchiveInputStream.html#read-byte:A-int-int-

在了解库的工作原理时,我做的另一件事是链接源代码并查看库代码以了解幕后实际发生的事情。

关于java - 在 java 中遍历 tar.gz,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53231065/

相关文章:

java - 如何使用 JUnit 测试 Java 中的任何输出

java - Intellij Idea : sbt refresh FetchError$DownloadingArtifacts npm-4. 2.0-sources.jar: 未找到

java - oracle 10g增加自增自减列

java - 如何在 vaadin 框架中创建具有数据库连接的登录页面?

java - 如何使用 Java 8 和 StringJoiner 连接列表中的两个字段?

java - 无法使 split() 函数执行我想要的操作

java - 自动查找枚举类中未使用的常量

java - 文件: URI corresponding to a Windows path name look like?应该如何

Java 读取行直到 followstop

java - java中的数字到字母(就像旧手机的键盘)