我使用jarchivelib创建了使用tar
和bzip2
的压缩归档,其使用org.apache.commons.compress。
try {
Archiver archiver = ArchiverFactory.createArchiver(ArchiveFormat.TAR, CompressionType.BZIP2);
File archive = archiver.create(archiveName, destination, sourceFilesArr);
} catch (IOException e) {
e.printStackTrace();
}
有时可能会发生创建的文件损坏,因此我想检查一下并在必要时重新创建存档。没有错误抛出,我尝试使用tar -xf file.tar.bz2
手动解压缩时检测到损坏(注意:使用tar -xjf file.tar.bz2
解压缩工作完美无缺)
tar: Archive contains `\2640\003\203\325@\0\0\0\003\336\274' where numeric off_t value expected
tar: Archive contains `\0l`\t\0\021\0' where numeric mode_t value expected
tar: Archive contains `\003\301\345\0\0\0\0\006\361\0p\340' where numeric time_t value expected
tar: Archive contains `\0\210\001\b\0\233\0' where numeric uid_t value expected
tar: Archive contains `l\001\210\0\210\001\263' where numeric gid_t value expected
tar: BZh91AY&SY"'ݛ\003\314>\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\343\262\037\017\205\360X\001\210: Unknown file type `', extracted as normal file
tar: BZh91AY&SY"'ݛ�>��������������������������������������X�: implausibly old time stamp 1970-01-01 00:59:59
tar: Skipping to next header
tar: Exiting with failure status due to previous errors
是否有办法使用org.apache.commons.compress检查压缩存档是否已损坏?由于文件的大小可以达到几GB,因此无需解压缩的方法就会很棒。
答案 0 :(得分:1)
由于bzip2
压缩产生了一个流,因此无法在不解压缩该流并将其传递给tar
进行检查的情况下检查损坏。
无论如何,在您的情况下,您实际上是直接使用tar
解压缩而不是先传递给bzip2
。这是根本原因。您需要始终使用-j
标记tar
,因为它由bzip2
压缩。这就是第二个命令正常工作的原因。