通过Apache Commons Compress检测压缩类型

时间:2011-08-20 13:57:41

标签: java compression apache-commons apache-tika

使用 Apache Commons Compress API,是否可以通过内容(即,不是来自文件扩展名)可靠地检测文件的压缩类型?

使用 Apache Tika ,可以做

Tika tika = new Tika();
String path = <the full path to the file examined, including the filename>;
FileInputStream fis = new FileInputStream(new File(path));
String type = tika.detect(fis);

并且类型变量将填充检测到的文件内容的MIME类型(例如,text / plain,application / zip等)。

理想情况下,我想避免让Tika参与这个过程有很多原因,包括Tika似乎错误地将其视为“文本/简单”的AR档案格式,这是Commons Compress可以制作的格式之一。

1 个答案:

答案 0 :(得分:1)

你最好的选择可能是从文件中获取前几个字节,然后检查它们你感兴趣的各种格式的mime魔术字节模式。

当你要求它进行检测时,这就是Tika会为你做的事情。但是你可以编写自己的代码

有可能依次将流传递给每个Commons Compress解码器,并假设第一个没有爆炸的是格式,但这可能有点不可靠......

我建议你坚持使用Tika,对于Tika当前不支持的任何格式,都会为检测问题打开bug report。如果可以的话,上传一个非常小的测试文件,可以在单元测试中使用,如果可能的话,也可以上传魔术检测字节。 (对于commons compress支持的格式,如果需要,您应该能够在公共压缩代码中找到标题详细信息)