【问题标题】:Iterate through tar.gz in java [duplicate]在java中遍历tar.gz [重复]
【发布时间】:2018-11-09 17:59:53
【问题描述】:

我有一个 tar.gz 文件,其中包含大量的小 xml 文件(略小于 1.5m)(没有子目录)。 现在我想遍历这些,我正在尝试使用 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() strong> 返回预期结果。

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

【问题讨论】:

  • 这是一个从 tar 文件读取的示例:thinktibits.blogspot.com/2013/01/…
  • 好参考!谢谢!准确地解释了解决最初的问题必须做的事情,这就是为什么我认为这应该是公认的答案。如果您使用相关代码-sn-p 发布它,我会接受。否则我会在几天内这样做,因此相关代码位于答案中,而不仅仅是供将来参考的链接。

标签: java


【解决方案1】:

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-

在弄清楚库如何工作时,我要做的另一件事是链接源代码并查看库代码以了解幕后实际发生的情况。

【讨论】:

  • 真丢脸!我对 TarArchiveEntry 的类文档感到困惑,并问自己如何正确构造,这样我就不必费心研究方法文档,因为这对我来说似乎绝对清楚。顺便说一句,好建议。我仍然倾向于忘记查看库的源代码通常很有用!
猜你喜欢
  • 2020-05-15
  • 2011-09-04
  • 1970-01-01
  • 2017-09-28
  • 1970-01-01
  • 1970-01-01
  • 2015-07-12
  • 2010-11-07
  • 1970-01-01
相关资源
最近更新 更多