使用mimeutil从内容获取Java文件类型无法按预期工作

在我的以下代码中:

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

谢谢

好吧,我想我为自己(和你)想出了这个……我看了一下作者的unit testing,特别是MimeUtilTest.java,看看他在unit testing设置()中做了这个: MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.MagicMimeMimeDetector"); MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.ExtensionMimeDetector"); MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.OpendesktopMimeDetector"); MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.MagicMimeMimeDetector"); MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.ExtensionMimeDetector"); MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.OpendesktopMimeDetector");

我,你也是,只注册了第一个,MagicMimeMimeDetector。 一旦我添加了其他两个,它就开始正常工作了。

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

  MimeUtil .registerMimeDetector(System.getProperty("os.name").startsWith( "Windows") ? "eu.medsea.mimeutil.detector.WindowsRegistryMimeDetector" : "eu.medsea.mimeutil.detector.OpendesktopMimeDetector");