mime-utilでファイルのMIME Typeを判別する

mime-utilというライブラリを使うと、ファイルの内容からMIME Typeを判別することができます。

MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.MagicMimeMimeDetector");
Collection<?> mimeTypes = MimeUtil.getMimeTypes("foo.pdf");

registerMimeDetectorで、MIME Typeの判別に使用するMimeDetectorのクラスを指定します。ファイル内容から判断する場合には上記の様に"eu.medsea.mimeutil.detector.MagicMimeMimeDetector"を指定します。MagicMimeMimeDetectorは、linuxのfile(1)コマンドと同じ方法で(ライブラリに含まれるmagic.mimeファイルから)MIME Typeを判断します。他にも拡張子から取得するMimeDetectorがあります(詳細は参考のサイトを参照)。

getMimeTypesの戻り値はMimeTypeのCollectionです。複数のMIME Typeを持つのがどういうケースかわかりませんが、、MIME Typeが不明の場合には"application/octet-stream"となります。

MimeUtilとMimeUtil2がありますが、MimeUtilはstaticメソッドで利用し、MimeUtil2はインスタンス化して利用します(MimeUtilの内部でMimeUtil2のインスタンスを保持しています)。