在我的以下代码中:

MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.MagicMimeMimeDetector");
File f = new File ("c:\\temp\\mime\\java.exe");
Collection<?> mimeTypes = MimeUtil.getMimeTypes("c:\\temp\\mime\\java.exe");
MimeType m = mimeTypes.toArray(new MimeType[mimeTypes.size()])[0];
System.out.println(m);

无论选择什么文件类型,即 csv、xls、exe 等,输出始终是 application/octet-stream。

但根据以下网站:

http://www.rgagnon.com/javadetails/java-0487.html

它应该显示为 ms-word 或 ms-excel 等。

如何使这项工作?我想要的只是从文件内容中获取文件类型(而不是使用不太可靠的文件扩展名)。我正在阅读其他选项,例如 tika 需要太多文件(例如 20),这对于这个单一目的来说太多了,而 JMimeMagic 需要 apache-oro 这是一个死项目,因此我也不喜欢这个想法。所有其他解决方案似乎都依赖于文件扩展名,如上所述,这些文件扩展名似乎不可靠。

谢谢

最佳答案

好吧,我想我为自己(和你)想出了这个……我查看了作者的单元测试,特别是 MimeUtilTest.java 和瞧,他在单元测试 setup() 中做到了这一点:MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.MagicMimeMimeDetector");MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.ExtensionMimeDetector");MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.OpendesktopMimeDetector");
我和你也只注册了第一个,MagicMimeMimeDetector。一旦我添加了另外两个,它就开始正常工作了。

关于Java 使用 mimeutil 从内容中获取文件类型未按预期工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13775494/

10-09 05:30