0

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

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

bug689.csv是一个 CSV 文件,测试失败是因为 te.isFile() 显然返回 true。te.getName() 似乎返回了 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());
    }

4

1 回答 1

0

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

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

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

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

于 2020-02-20T21:27:02.660 回答