是否有使用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类型填充type变量(例如,文本/纯文本,应用程序/ zip等)。

理想情况下,出于多种原因,我想避免让Tika参与此过程,包括Tika似乎误将AR存档格式误认为是“文本/纯文本”,这是Commons Compress可以生产的。

最佳答案

最好的选择是从文件中获取前几个字节,并检查它们是否包含您感兴趣的各种格式的哑剧魔术字节模式。

这是Tika要求您进行检测时将为您执行的操作。但是,您可以编写自己的代码

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

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

07-24 09:47
查看更多