You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在App内部存储创建并写入JSON文件失败,求原因排查

问题分析与解决方案

核心问题点

  • 父目录未创建:你指定的mydir目录如果不存在,直接在其中创建文件会失败。系统不会自动创建不存在的父目录,必须手动处理。
  • 异常被静默忽略:catch (e: Exception){}没有任何错误输出,导致你无法定位具体问题(比如读写权限、文件路径错误等)。
  • 资源管理不够稳妥:手动调用flush()和close()容易遗漏,存在资源泄漏风险。

修正后的代码

fun addJson(){
    val dir = File(this.filesDir, "mydir")
    // 确保目标目录存在,不存在则创建(包括多级父目录)
    if (!dir.exists()) {
        dir.mkdirs()
    }
    try {
        val file = File(dir,"stempel.json")
        // 使用use函数自动管理FileWriter资源,无需手动close
        FileWriter(file).use { writer ->
            val inputStream = assets.open("stempel.json")
            // 直接读取assets中的JSON字符串写入目标文件
            val json = inputStream.bufferedReader().use { it.readText() }
            writer.append(json)
        }
        // 可选:验证文件是否创建成功
        if (file.exists()) {
            println("文件创建成功,大小:${file.length()}字节")
        } else {
            println("文件创建失败")
        }
    } catch (e: Exception){
        // 打印异常堆栈,快速定位问题
        e.printStackTrace()
    }
}

额外说明

从assets读取的JSON字符串无需转成JSONArray再调用toString()——这一步完全多余,还可能破坏原JSON的格式(比如缩进、换行),直接写入原字符串即可。

内容的提问来源于stack exchange,提问作者Kalle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 23:12:46