Android设备突然掉电文件保存为空

问题遇到的现象和发生背景

Android 使用BufferedWriter写文件时,Android 设备突然断电,保存的文件大小为 0 B,再次启动设备,在桌面点击该程序,无法进入,会闪退。大家遇到过这个问题过吗?希望解答,谢谢。

    fun save(file: File, dataLists: List<DataItem>) {
        Log.d("TAG", "save: ${file.toString()}")
        val bufferedWriter = BufferedWriter(FileWriter(file))
        val tempSb = StringBuilder()
        tempSb.append("开始时间,结束时间\r\n")
        for (i in dataLists.indices) {
            tempSb.append(dataLists[i].toString() + "\r\n")
        }
        bufferedWriter.write(tempSb.toString())
        bufferedWriter.flush()
        bufferedWriter.close()
    }

建议使用 mmkv 进行内容存储保存。

通过 mmap 内存映射文件,提供一段可供随时写入的内存块,App 只管往里面写数据,由操作系统负责将内存回写到文件,不必担心 crash 导致数据丢失。

写文件的时候,先写入一个tmp文件,写好了之后重命名覆盖原文件,不要先把原始文件删除,这样即使失败了大不了相当于没有更改,不会全没了
此外,启动app读文件的时候要做判断,没有文件或者有文件没内容,就用默认方式初始化变量,不要没内容还硬读,不崩溃了

mmkv确实不错可以试试

img


通过方式一解决的,大家遇到相似的问题可以试试,至于原理我现在也不明白