2011-08-20 89 views
0

压缩类型是否有从其内容可靠地检测出文件的压缩类型的快速方法(即,不从文件扩展名),使用Apache的百科全书压缩 API?检测通过Apache共享压缩

使用阿帕奇提卡,可以做

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类型的文件内容(例如,文本/无格式,应用程序/压缩等)。

理想情况下,我想避免在这个过程中涉及Tika,原因很多,包括Tika似乎错误地检测为AR文档格式的文本/简单格式,这是由Commons Compress生成的格式。

+0

我建议你为AR格式问题打开一个Tika bug,并且包含一个非常小的样本用于单元测试的文件 – Gagravarr

回答

1

你最好的选择可能是抢从文件的前几个字节,并检查他们为你所感兴趣的各种格式的MIME魔力字节模式。

这是提卡会做当你要求它做检测时。然而,你可以编码自己的一个

它可能会依次传递流到每个Commons Compress解码器,并假定第一个不爆炸是格式,但这可能有点不可靠。 ..

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

+1

Commons压缩“自动检测”代码按照您的建议工作,正如我在此期间发现的那样,我认为现在比Tika更好。无论如何,我没有提交关于此的Tika问题(请参阅https://issues.apache.org/jira/browse/TIKA-697),请遵循您提供的链接。谢谢! – PNS