如何在android中获取具有特殊字符的文件的MimeType

Rub*_*apa 1 android

我正在尝试获取 android 中文件的 mime 类型,并且我可以使用此代码获取 mime 类型

val extension = MimeTypeMap.getFileExtensionFromUrl(file)
        val fileType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension.toLowerCase())
Run Code Online (Sandbox Code Playgroud)

但问题是文件名是否包含空格或其他特殊字符

例如, /storage/emulated/0/Download/Snow Falling Down.mp4 它返回 null。

Ham*_*han 6

您可以使用此方法获取文件扩展名。然后你可以从扩展中获取MimeType

爪哇语

public static String getExtension(String fileName) {
    String encoded;
    try {
        encoded = URLEncoder.encode(fileName, "UTF-8").replace("+", "%20");
    } catch (UnsupportedEncodingException e) {
        encoded = fileName;
    }

    return MimeTypeMap.getFileExtensionFromUrl(encoded).toLowerCase();
}
Run Code Online (Sandbox Code Playgroud)

在科特林中

fun getExtension(fileName: String): String {
    val encoded: String = try {
        URLEncoder.encode(fileName, "UTF-8").replace("+", "%20")
    } catch (e: Exception) {
        fileName
    }

    return MimeTypeMap.getFileExtensionFromUrl(encoded).toLowerCase()
}
Run Code Online (Sandbox Code Playgroud)

或者作为 Kotlin 扩展:

fun File.getExtension(): String {
    val encoded: String = try {
        URLEncoder.encode(name, "UTF-8").replace("+", "%20")
    } catch (e: Exception) {
        name
    }

    return MimeTypeMap.getFileExtensionFromUrl(encoded).toLowerCase(Locale.getDefault())
}
Run Code Online (Sandbox Code Playgroud)