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

Android(Kotlin)如何在内部存储指定目录下写入JSON保存文件?

解决Android内部存储创建子目录并写入文件的问题

你遇到的问题根源是openFileOutput()方法只能直接操作应用内部存储的根目录(即getFilesDir()指向的私有目录),无法直接传入带子目录的路径字符串,因此触发了路径分隔符的错误。要实现将文件存入savefiles子目录的需求,需要先创建目标子目录,再在该目录下创建文件并写入内容。

修正后的代码如下:

try {
    // 基于应用内部存储根目录,构建savefiles子目录对象
    val saveDir = File(filesDir, "savefiles")
    // 目录不存在则创建(mkdirs支持多级目录创建,比mkdir更稳妥)
    if (!saveDir.exists()) {
        saveDir.mkdirs()
    }
    // 生成带时间戳的文件名
    val fileName = "${SimpleDateFormat("yyyyMMddHHmmss").format(Date())}.json"
    // 创建要写入的文件对象
    val targetFile = File(saveDir, fileName)
    // 写入JSON内容,use函数会自动关闭流,避免资源泄漏
    OutputStreamWriter(FileOutputStream(targetFile)).use { writer ->
        writer.write(myJson.toString())
    }
} catch (e: IOException) {
    Log.e("Exception", "File write failed: $e")
}

关键细节说明:

  • filesDir是Context的内置属性,指向应用专属的内部存储私有目录(路径格式为/data/data/你的应用包名/files),无需申请额外存储权限。
  • mkdirs()会递归创建所有不存在的父目录,哪怕后续目录结构变复杂也能适配,比仅创建单级目录的mkdir()更实用。
  • 使用use函数包裹流操作,能自动完成流的关闭操作,避免手动调用close()可能出现的资源泄漏问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 20:07:42