android 14 创建文件java.io.IOException: Operation not permitted
- Operation not permitted
- 问题原因
- Android文件系统有哪些
Operation not permitted
问题原因
一般是创建文件时,文件夹或文件名称包含特殊字符,创建文件或文件夹时需要检查文件名称是否合法
参考android.os.FileUtils代码(内部类,App不可直接使用)
/*** 文件名称是否合法(FAT系统)*/fun isValidFatFilename(name: String?): Boolean {return name != null && name == buildValidFatFilename(name)}private fun trimFilename(res: java.lang.StringBuilder) {var maxBytes = 255var raw = res.toString().toByteArray(StandardCharsets.UTF_8)if (raw.size > maxBytes) {maxBytes -= 3while (raw.size > maxBytes) {res.deleteCharAt(res.length / 2)raw = res.toString().toByteArray(StandardCharsets.UTF_8)}res.insert(res.length / 2, "...")}}/*** 创建一个合法的文件名称(FAT系统)*/fun buildValidFatFilename(name: String): String {if (TextUtils.isEmpty(name) || "." == name || ".." == name) {return "(invalid)"}val res = java.lang.StringBuilder(name.length)for (element in name) {if (isValidFatFilenameChar(element)) {res.append(element)} else {res.append('_')}}trimFilename(res)return res.toString()}// 不合法的字符private fun isValidFatFilenameChar(c: Char): Boolean {return if (c.code in 0x00..0x1f) {false} else when (c) {'"', '*', '/', ':', '<', '>', '?', '\\', '|', 0x7F.toChar() -> falseelse -> true}}
Android文件系统有哪些
参考文章:android操作系统之文件系统详解 安卓常用文件系统