2012-02-28 55 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()一个“子”自己得到它。