0
点赞
收藏
分享

微信扫一扫

11.创建后台系统项目

m逆光生长 03-23 20:30 阅读 3
androidjava

android 14 创建文件java.io.IOException: Operation not permitted

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 = 255
        var raw = res.toString().toByteArray(StandardCharsets.UTF_8)
        if (raw.size > maxBytes) {
            maxBytes -= 3
            while (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() -> false
            else -> true
        }
    }

Android文件系统有哪些

参考文章:android操作系统之文件系统详解 安卓常用文件系统

举报

相关推荐

0 条评论