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 などのように表示されるはずです。

これを機能させる方法は?私が望むのは、ファイルの内容からファイルの種類を取得することだけです(あまり信頼できないファイル拡張子を使用するのではありません)。私は、この単一の目的には多すぎるファイル (20 など) を必要とする tika や、死んだプロジェクトである apache-oro を必要とする JMimeMagic などの他のオプションについて読んでいました。他のすべてのソリューションは、上記のように信頼できないと思われるファイル拡張子に依存しているようです。

ありがとう

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 だけを登録していました。他の 2 つを追加すると、すべてが正しく機能し始めました。

于 2012-12-11T18:43:07.037 に答える
2

OSを尊重するので、試してみてください:

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