2012-02-28 72 views
1

我正在寫一個基本的文件瀏覽器,用於根據文件的MIME類型更改顯示的文件所使用的圖標,但是我無法找到某些文件的MIME類型,我不知道爲什麼,我使用的是找到MIME類型的代碼是這樣的:如何獲取奇怪命名文件的MIME類型?

private String getFileMimeType(File file) 
{ 
    Uri fileUri = Uri.fromFile(file); 
    String ext = MimeTypeMap.getFileExtensionFromUrl(fileUri.toString()); 
    return mtm.getMimeTypeFromExtension(ext); 
} 

它適用於某些文件,而不是一些與他們更加複雜的人物,我真的不明白,下面的例子:

enter image description here

帶有tildas的文件都是功能性mp3,但都返回null爲他們的MIME類型,這是不適合功能的MP3,所以我很好奇,如果有任何簡單的解決方法,爲他們的名字中有特殊字符的文件。

回答

4

它是因爲文件名中的「〜」字符。

看getFileExtensionFromUrl

/** 
* Returns the file extension or an empty string iff there is no 
* extension. 
*/ 

public static String getFileExtensionFromUrl(String url) { 
    if (url != null && url.length() > 0) { 
     int query = url.lastIndexOf('?'); 
     if (query > 0) { 
      url = url.substring(0, query); 
     } 
     int filenamePos = url.lastIndexOf('/'); 
     String filename = 
      0 <= filenamePos ? url.substring(filenamePos + 1) : url; 

    // if the filename contains special characters, we don't 
    // consider it valid for our matching purposes: 
    if (filename.length() > 0 && 
     Pattern.matches("[a-zA-Z_0-9\\.\\-\\(\\)]+", filename)) { // <-- 
     int dotPos = filename.lastIndexOf('.'); 
     if (0 <= dotPos) { 
      return filename.substring(dotPos + 1); 
     } 
    } 
} 

return ""; 

}

一個可能的解決辦法是與更廣泛的匹配規則寫自己的這種方法的實行的實現。 希望這有助於

2

由於這是你真的需要getMimeTypeFromExtension(..)工作的擴展,你可以嘗試通過簡單地使用lastIndexOf(".")得到擴展從File.getAbsolutePath()一個「子」自己得到它。