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

时间:2012-12-08 07:27:13

标签: java mime-types

在我的以下代码中:

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

由于

2 个答案:

答案 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");