使用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");