2011-01-31 47 views
9

我想確定存儲在Android設備(實際上是我用模擬器使用的虛擬設備)上的文件的MIME /媒體類型。我發現這個資源Get the MIME Type from a File其建議javax.activation.MimetypesFileTypeMap,但是當我運行下面的代碼我得到application/octet-stream所有文件類型:Java MimetypesFileTypeMap總是返回在Android模擬器上的應用程序/八位字節流

MimetypesFileTypeMap map = new MimetypesFileTypeMap(); 
File dir = Environment.getExternalStorageDirectory(); 
File[] files = dir.listFiles(); 
String mimeType; 
for(int i = 0; i < files.length; ++i) { 
    if(files[i].isDirectory() == false) { 
     mimeType = map.getContentType(files[i]); 
     if(mimeType.toLowerCase().equals("application/octet-stream")) { 
      Log.d("mytag", 
       String.format("Unable to determine the mime type of file %s.", 
       files[i].getName())); 
     } 
    } 
} 

我有具有以下擴展名的文件進行測試這樣的:JPG,TXT,DOC,XSLX和pdf,他們都返回相同的東西。有什麼我必須做的初始化地圖?這個庫能不能在Android上找到支持的MIME類型列表?有沒有更好的方式來獲取Android上的MIME類型的文件?

+0

我遇到了同樣的問題(Android是不參與),看到這個鏈接http://stackoverflow.com/questions/ 6308142 /添加-mimetypes-to-mimetypesfiletypemap。我認爲我們需要添加一個帶有mime類型完整列表的reosurce文件,但還沒有嘗試過 – 2012-01-26 09:50:49

回答

13

也有這個問題。根據Java文檔MimetypesFileTypeMap搜索

  1. 以編程方式將條目添加到MimetypesFileTypeMap實例。
  2. 用戶主目錄中的文件.mime.types。
  3. 文件/lib/mime.types
  4. 文件或資源名爲META-INF/MIME類型
  5. 文件或資源名爲META-INF/MIME types.default(通常只有在激活發現.jar文件)

如果您MIMETYPES都出來爲「應用程序/八位字節流」,這意味着你有沒有出現在上述文件(或他們是存在的,但不完全),並沒有添加任何條目到您的MimetypesFileTypeMap實例。

爲了解決......

MimetypesFileTypeMap中MIME類型規範格式

# comments start with hash marks 
# format is <mime type> <space separated file extensions> 
# for example, for an image mime type and a text mime type 
image png tif jpg jpeg bmp 
text txt text rtf TXT 
# either place those lines within the files specified by 2-4 or 

MimetypesFileTypeMap mtftp = new MimetypesFileTypeMap(); 
mtftp.addMimeTypes("image png tif jpg jpeg bmp") 

# and it's as easy as that! 
+0

嘗試過它。謝謝!!! – 2014-06-05 22:28:06

相關問題