在我的以下代码中:
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,这是一个死的项目因此我也不喜欢这个想法。所有其他解决方案似乎依赖于文件扩展,如上所述似乎不可靠。
由于
答案 0 :(得分:2)
好吧,我想我为自己(和你)想出了这个......我看了一下作者的单元测试,特别是MimeUtilTest.java并且看,他在单元测试设置中做到了这一点( ):
MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.MagicMimeMimeDetector");
MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.ExtensionMimeDetector");
MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.OpendesktopMimeDetector");
我,你也是,只注册了第一个,MagicMimeMimeDetector。一旦我添加了其他两个,它就开始正常工作了。
答案 1 :(得分:1)
尊重操作系统,因此您可以尝试:
MimeUtil
.registerMimeDetector(System.getProperty("os.name").startsWith(
"Windows") ? "eu.medsea.mimeutil.detector.WindowsRegistryMimeDetector"
: "eu.medsea.mimeutil.detector.OpendesktopMimeDetector");