Java:验证 TAR 文件

标签 java validation tar

是否可以在 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/

相关文章:

java - Html.fromHtml() 强制不删除未知标签

java - spring 基于注解的配置——内存消耗太高?

java - 如何使用jsp返回AJAX响应?

php - 使用 PHP 验证 rfc2616 日期字符串

ajax - AjaxFormComponentUpdatingBehavior 和表单提交的不同验证器集

linux - SwiftMailer:无法在 Linux 上打开 .tar.gz 文件

java - 如何编写 Gradle 脚本以将 shadowjar 发布到 Artifactory

ios - 使用 ReactiveCocoa 查看验证

linux - 如何将完成 tar xzf 解压缩的每个文件传递给 bash 循环?

perl - 如何像 tar 在 UNIX 中一样在 Perl 中归档目录?