0

是否有一种使用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 可生产的格式之一。

4

1 回答 1

1

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

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

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

我建议您坚持使用 Tika,并且对于 Tika 当前不支持的任何格式,打开检测问题的错误报告。如果可以的话,上传一个可以在单元测试中使用的非常小的测试文件,如果可能的话,也上传魔法检测字节。(对于 commons compress 支持的格式,如果需要,您应该能够在 commons compress 代码中找到 header 详细信息)

于 2011-08-22T11:35:02.630 回答