使用 FileNameMap
FileNameMap fileNameMap = URLConnection.getFileNameMap();
fileNameMap.getContentTypeFor(filename);
優點:Java SDK API 內建
缺點:支援的檔案類型太少
使用 JMimeMagic
@Grab(group='jmimemagic', module='jmimemagic', version='0.1.2')
import net.sf.jmimemagic.*
Magic parser = new Magic() ;
// getMagicMatch accepts Files or byte[],
// which is nice if you want to test streams
MagicMatch match = parser.getMagicMatch(new File("gumby.gif"), true);
System.out.println(match.getMimeType()) ;
優點:支援檔案類型多
缺點:檔案必須實際存在
使用 mime-util
@Grapes(
@Grab(group='eu.medsea.mimeutil', module='mime-util', version='2.1.3')
)
import eu.medsea.mimeutil.MimeUtil;
MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.MagicMimeMimeDetector");
File f = new File ("c:/temp/mime/test.doc");
Collection mimeTypes = MimeUtil.getMimeTypes(f);
System.out.println(mimeTypes);
// output : application/msword
優點:函式庫迷你小巧
缺點:測試許多檔名結果都是 application/octet-stream
使用 javax.activation
@Grapes(
@Grab(group='javax.activation', module='activation', version='1.1.1')
)
import javax.activation.MimetypesFileTypeMap;
new MimetypesFileTypeMap().getContentType("test.css");
優點:使用方法容易程式碼乾淨
缺點:和URLConnection有同樣支援類型不足問題
使用 Apache Tika
@Grab('org.apache.tika:tika-core:1.0')
@Grab('org.apache.tika:tika-parsers:1.0')
import org.apache.tika.Tika
new Tika()
//Tika.detect(new String("test"))
使用 Apache Tika
@Grab('org.apache.tika:tika-core:1.0')
@Grab('org.apache.tika:tika-parsers:1.0')
import org.apache.tika.Tika
new Tika()
//Tika.detect(new String("test"))
優點:功能完整的函式庫
缺點:未試成功
使用 jets3t
@Grab('net.java.dev.jets3t:jets3t:0.8.1')
import org.jets3t.service.utils.Mimetypes
Mimetypes.instance.getMimetype('test.css')
優點:簡單易用
缺點:需要 mime.type 設定
mime.types 可以從 Apache Httpd 下載,放到 classpath 下,就可以自動偵測檔案中有定義的類型。
沒有留言:
張貼留言