javaでファイルの種類を判定する
javaでファイルの種類を判定する場合、mime-utilというライブラリを使うと便利らしい。
詳細は元のサイトを参照していただきたい。
2010/3/17追記:開発元のサイトが見れないので、sourceforge.netのリンクも追記しておく。
Mime Type Detection Utility download | SourceForge.net
検出アルゴリズムは次の通り
- ExtensionMimeDetector
- MagicMimeMimeDetector
- OpendesktopMimeDetector
- TextMimeDetector
- WindowsRegistryMimeDetector
MagicMimeMimeDetector
UNIXのfile(1)コマンドと同じアルゴリズムに基づいてファイルの種類を判定する。
magic.mimeファイルのみ使用しているため、ファイルの中身のMIMEタイプは判別できるが、テキストファイルのエンコーディングなどは分からない。
windowsのようなfile(1)コマンドを持たないシステム上では、mime-util内蔵のmagic.mimeファイルが使われる。
file(1)コマンドを持っているシステム上では、内蔵のファイルは無視され、システムのmagic.mimeファイルが使われる。
システム毎に検出結果が異なると困るので、以下のような順番で使うmagic.mimeファイルを探す。
OpendesktopMimeDetector
freedesktop.orgで開発が進められている、"shared MIME info"という名前のMIMEの検出のためのクロスプラットフォーム仕様のデータベースに基づいて検出する。
TextMimeDetector
サブクラス化できないし、
コードから登録したり、削除できない特別なMimeDetector
他のMimeDetectorから使われる。
WindowsRegistryMimeDetector
Windows上でのみ使うことができるMimeDetector
Windowsのレジストリに登録されている拡張子に基づいてMIMEタイプを返す。
ちょっと使ってみた感想
JARファイルを検出させてみると、
ExtensionMimeDetectorだと、JARファイルだと認識するが、
MagicMimeMimeDetectorだと、ZIPファイルだと認識する。
JARファイルはZIPファイルそのものだから、当然だけど。