我正在编写一个基本的文件浏览器,它根据文件的 MIME 类型更改用于显示的文件的图标,但我无法找到某些文件的 MIME 类型,我不确定为什么,因此,我用来查找 MIME 类型的代码是:
private String getFileMimeType(File file)
{
Uri fileUri = Uri.fromFile(file);
String ext = MimeTypeMap.getFileExtensionFromUrl(fileUri.toString());
return mtm.getMimeTypeFromExtension(ext);
}
它适用于某些文件,但不适用于其中包含更复杂字符的文件,我不太了解,示例如下:
带有 tildas 的文件都是功能性 mp3,但它们的 MIME 类型都返回 null,这对功能性 mp3 不利,所以我很好奇对于名称中包含特殊字符的文件是否有任何简单的解决方法。
最佳答案
这是因为文件名中的“~”字符。
看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 "";
一个可能的解决方案是使用更广泛的匹配规则编写您自己的此方法的实现。 希望这有帮助
关于android - 如何获取名称奇怪的文件的 MIME 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9487405/