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

Android Studio无法保存到内部存储问题求助

搞定保存后文件找不到的问题!

嘿,我仔细看了你的代码和日志,马上发现几个关键问题,帮你解决这个困扰:

1. 最核心的问题:文件路径不匹配

你的saveFile()用openFileOutput("data.json", Context.MODE_PRIVATE)写文件,这个方法会把文件存在App内部存储的专属目录(/data/data/me.elian.contactsaver/files/)。但loadFile()里判断!file.exists()的那个file对象,肯定是路径不对——要么你指向了外部存储,要么目录写错了,导致明明文件已经写进去了,却被判断成“不存在”。

修复思路:别用自定义的file对象判断,直接依托openFileInput的异常来判断文件是否存在,或者用fileList.contains("data.json")检查内部存储的文件列表,这俩都比你自己定义的file靠谱。

2. 读取逻辑的小坑

你读文件的时候先调用scanner.nextLine()打日志,然后又用scanner.nextLine()解析JSON。但看你的日志,JSON是整一行的!第一次nextLine()就把所有内容读完了,第二次调用直接抛NoSuchElementException,走到“empty file”分支,这也会让你误以为文件有问题。

给你改好的完整代码

修复后的loadFile()

fun loadFile() {
    try {
        // 用use自动关闭流,不用手动写close()
        openFileInput("data.json").use { inputStream ->
            val json = inputStream.bufferedReader().readText()
            d(TAG, json)
            if (json.isNotEmpty()) {
                dateList = gson.fromJson(json, FileList::class.java).list
            } else {
                d(TAG, "empty file")
            }
        }
    } catch (e: FileNotFoundException) {
        // 捕获这个异常就代表文件真的不存在
        d(TAG, "doesn't exist")
    } catch (e: Exception) {
        Toast.makeText(this, R.string.error_loading, Toast.LENGTH_LONG).show()
        d(TAG, "Error loading file", e)
    }
}

优化后的saveFile()(同样用use自动关流,更安全)

fun saveFile() {
    val fileList = FileList(dateList)
    val json = gson.toJson(fileList)
    try {
        d(TAG, json)
        openFileOutput("data.json", Context.MODE_PRIVATE).use { output ->
            output.write(json.toByteArray())
            d(TAG, "wrote")
        }
    } catch (e: Exception) {
        Toast.makeText(this, R.string.error_saving, Toast.LENGTH_LONG).show()
        d(TAG, "Error saving file", e)
    }
}

为啥这么改?

  • 用FileNotFoundException判断文件不存在,和openFileOutput用的是完全相同的路径,绝对不会出现“存了但找不到”的情况。
  • use语法是Kotlin的糖,能自动帮你关闭流,避免手动关闭时可能出现的遗漏或者异常。
  • 一次性读取全部文本,不管JSON是单行还是格式化后的多行,都能完整读取,不会出现Scanner跳行的问题。

赶紧试试这个修改,模拟器和真机应该都能正常工作了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:50:56