4

在我的以下代码中:

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 这是一个死项目,因此我也不喜欢这个想法。所有其他解决方案似乎都依赖于文件扩展名,如上所述似乎不可靠。

谢谢

4

2 回答 2

3

好的,我想我是为自己(和你)想出来的......我查看了作者的单元测试,特别是 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。一旦我添加了另外两个,它就开始正常工作了。

于 2012-12-11T18:43:07.037 回答
2

尊重操作系统,因此您可以尝试:

  MimeUtil
        .registerMimeDetector(System.getProperty("os.name").startsWith(
              "Windows") ? "eu.medsea.mimeutil.detector.WindowsRegistryMimeDetector"
              : "eu.medsea.mimeutil.detector.OpendesktopMimeDetector");
于 2016-04-27T15:16:43.870 回答