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()
没有问题。
我正在使用 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()
没有问题。