Apache 公共压缩

Apache commons-compress

我正在使用 commons-compress 处理 tar 球文件并注意到即使不是 tar 的文件似乎也被处理了。这是为什么——是否有更好的库来检测有效的 tar 文件

 <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-compress</artifactId>
      <version>1.20</version>
 </dependency>

bug689.csv 是一个 CSV 文件,测试失败是因为显然 te.isFile() return 是正确的。 te.getName() 似乎是 return CSV 的内容。这是我错误地使用包的错误吗——我希望 InputStream 无法成功转换为 TarArchiveEntry

    @Test
    public void testTarball() throws IOException{
        InputStream tarData = this.getClass().getResourceAsStream("/bug689.csv");
        TarArchiveInputStream tis = new TarArchiveInputStream(tarData);
        TarArchiveEntry te = tis.getNextTarEntry();
        assertFalse(te.isFile());
    }

如果您处理的不是 tar 文件,那么 tis.getNextTarEntry() 将是 null - 因此您必须明确地检查它。

但是如果您确实有一个有效的 tar 文件,请小心依赖 te.isFile()。 tar 中的第一项可能不是常规文件。它可能是目录或其他东西。

tar 文件甚至可能为空 - 在这种情况下 tis.getNextTarEntry() 将再次为空。

如果您只想测试包含一个常规文件的 tar,那么我认为使用 te.isFile() 没有问题。