2012-02-28 10 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

ティルダのファイルはすべて機能的なmp3ですが、すべて返されますそれらのMIMEタイプのためにはnullです。これは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 ""; 

}

可能な解決策が広く一致ルールで、この方法の独自のimplemenationを書くことであろうの実装で

ルック。 希望これは、それはあなたが本当にgetMimeTypeFromExtension(..)で作業する必要が延長だとして、あなたは、単にFile.getAbsolutePath()から「サブ」として拡張子を取得するためにlastIndexOf(".")を使用して、それを自分で取得してみてください

関連する問題