【问题标题】:Java: Validate a TAR fileJava:验证 TAR 文件
【发布时间】:2012-03-09 04:58:38
【问题描述】:

是否可以验证 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 个演出),我不希望看到这个过程比现在花费的时间更长。

【问题讨论】:

    标签: java validation tar


    【解决方案1】:

    由于您不想执行tar 命令,您可以使用Apache ANTorg.apache.tools.tar.TarInputStream 实现。

    就个人而言,我没有尝试过,也不是TAR file format 的专家,但我会尝试使用getNextEntry 方法迭代TAR 文件。假设一旦您完成所有操作而没有错误/异常,您已经(在某种程度上)证明了 TAR 文件是“有效的”。

    更新:实际上上面的 Wikipedia 页面列出了这些 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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-21
      • 1970-01-01
      • 2017-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多