[Java]根據檔案取得Mime Type的各種方法__Java

來源:互聯網
上載者:User

1、mime-util:

      該工具可以通過 檢測副檔名,或者檢測magic header 兩種技術方式來實現mime類型的檢測。

      比較可靠,而且輕量級、只依賴於slf4j一個包  。2010年後就沒有更新了。

      POM

<dependency>    <groupId>eu.medsea.mimeutil</groupId>    <artifactId>mime-util</artifactId>    <version>2.1.3</version></dependency>


    範例程式碼:

import eu.medsea.mimeutil.MimeUtil;  public class Main {      public static void main(String[] args) {          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      }  }  

2、 JMimeMagic   通過檢測檔案尾碼名去尋找檔案類型顯然不是一個健壯的方法。 JMimeMagic是一個通過檢查magic headers來判斷檔案或者流的mime 類型的java工具包 。 目前還在持續更新當中、推薦使用。 POM
<dependency>    <groupId>net.sf.jmimemagic</groupId>    <artifactId>jmimemagic</artifactId>    <version>0.1.4</version></dependency>
範例程式碼
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"));  System.out.println(match.getMimeType()) ;  

3、 java.net.URL   與上面所說的匹配尾碼名類似。尾碼名和mime-type的映射關係被定義在[jre_home]\lib\content-types.properties 該組件只根據副檔名判斷 mime-type。不是很可靠。
範例程式碼(推薦)
import java.net.FileNameMap;  import java.net.URLConnection;    public class FileUtils {      public static String getMimeType(String fileUrl)        throws java.io.IOException      {        FileNameMap fileNameMap = URLConnection.getFileNameMap();        String type = fileNameMap.getContentTypeFor(fileUrl);          return type;      }        public static void main(String args[]) throws Exception {        System.out.println(FileUtils.getMimeType("file://c:/temp/test.TXT"));        // output :  text/plain      }    } 
範例程式碼(不推薦:這種方式也是通過副檔名判斷mime type的、而且速度很慢)
import java.net.*;    public class FileUtils{    public static String getMimeType(String fileUrl)      throws java.io.IOException, MalformedURLException    {      String type = null;      URL u = new URL(fileUrl);      URLConnection uc = null;      uc = u.openConnection();      type = uc.getContentType();      return type;    }      public static void main(String args[]) throws Exception {      System.out.println(FileUtils.getMimeType("file://c:/temp/test.TXT"));      // output :  text/plain    }  }  

4、 javax.activation.MimetypesFileTypeMap   需要引入activation.jar這個jar包 , 他可以從下面這個網站獲得 http://java.sun.com/products/javabeans/glasgow/jaf.html . 
這個MimetypesFileMap類會映射出一個file的Mime Type,這些Mime Type類型是在activation.jar包裡面的資源檔中定義的  內建的mime-type列表中的數量有限,但是它提供了方法讓您可以很方便的添加更多的mime類型 

MimetypesFileTypeMap 會在使用者系統的很多地方去尋找檔案的MIME類型。當一個尋找MIME類型的請求到達後,他會按照下面這個順序去尋找MIME類型 

首先通過程式將檔案添加到MimetypesFileTypeMap的一個執行個體中 
尋找使用者的home路徑下的檔案 .mime.types 
尋找檔案  <java.home>/lib/mime.types 
尋找檔案或者資源 META-INF/mime.types 
尋找檔案或者資源 META-INF/mimetypes.default (一般只在 activation.jar 中去尋找). 

當你需要處理一個傳入的一般檔案命名的檔案的時候,這個方法是非常有趣的。結果出來的速度很快,因為只有副檔名被用來猜測檔案的自然屬性  範例程式碼
import javax.activation.MimetypesFileTypeMap;  import java.io.File;    class GetMimeType {    public static void main(String args[]) {      File f = new File("gumby.gif");      System.out.println("Mime Type of " + f.getName() + " is " +                           new MimetypesFileTypeMap().getContentType(f));      // expected output :      // "Mime Type of gumby.gif is image/gif"    }  }  



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.