是否可以在 Java 中验证 tar 文件,以便我可以确保其他 tar 实用程序(即 UNIX tar 命令)可以提取 tar?我想在代码中执行此操作,而不是从我的应用程序中实际执行 tar -tf
并根据返回代码进行报告。
我一直在使用 Apache commons compress 来读取 tars 条目(而不是提取它们)。我使用文本编辑器手动修改了一些 tar 文件来表示“损坏的”tar 文件。 Commons compress 并不总是无法读取条目,因为无论我修改什么,UNIX tar 命令或 7zip 都会始终失败。显然还需要做更多的事情才能真正确保 tar 文件没有损坏,但它是什么?
注意:我实际上并没有尝试通过 commons compress 提取 tar 作为验证手段。我不认为这确实是一个选择;我必须使用的 tar 文件大小很大(3 到 4 GB),我不想看到这个过程花费的时间比现在更长。
最佳答案
由于您不想执行 tar
命令,因此可以使用 org.apache.tools.tar.TarInputStream
实现Apache ANT .
就我个人而言,我没有尝试过,也不是TAR file format方面的专家。 ,但我会尝试使用 getNextEntry 方法迭代 TAR 文件。假设一旦您完成了所有操作并且没有出现错误/异常,您就(在某种程度上)证明了 TAR 文件是“有效的”。
更新:实际上上面的维基百科页面列出了这些 Java 实现:
Jtar 包含一个关于解压 TAR 文件的示例,我猜想可以将其修改为仅“测试”存档。
String tarFile = "c:/test/test.tar";
// Create a TarInputStream
TarInputStream tis = new TarInputStream(new BufferedInputStream(new FileInputStream(tarFile)));
TarEntry entry;
while((entry = tis.getNextEntry()) != null) {
System.out.println(entry.getName());
// The following might not be required, but arguably does
// additionally check the content of the archive.
int count;
byte data[] = new byte[2048];
while((count = tis.read(data)) != -1) {
}
}
tis.close();
关于Java:验证 TAR 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9629132/