Kotlin读写CSV文件 实现Android答题状态持久化存储
Android Kotlin 最简可运行CSV读写实现(适配测验题状态持久化)
本实现无第三方依赖,直接使用Android原生API,复制即可运行,完全匹配存储20道测验题完成状态的需求,最终生成checkDone.csv文件存储在应用私有目录,无需额外申请存储权限。
实现规则
- 数组适配:
chk_Q数组长度设为21,索引0预留不使用,索引120直接对应第120题,和现有业务逻辑完全对齐,未完成值为0、已完成值为2 - CSV格式:单行存储所有状态值,用英文逗号分隔,导出后可直接用表格软件打开查看
- 异常兜底:文件不存在、文件损坏、读取格式错误时自动初始化所有题目状态为0,不会导致应用崩溃
可直接复制的核心代码
把以下代码直接粘贴到你的MainActivity.kt中即可:
import android.content.Context import androidx.appcompat.app.AppCompatActivity import android.os.Bundle class MainActivity : AppCompatActivity() { // 固定CSV文件名 private val csvFileName = "checkDone.csv" // 题目状态数组,索引1-20对应20道题,默认值全为0 private var chk_Q = IntArray(21) { 0 } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // 启动时第一步读取CSV加载历史状态 readCsvStatus() // 原有业务逻辑写在下方即可 // 示例:第1题完成时赋值 // chk_Q[1] = 2 // 赋值后立刻调用写入方法持久化 // saveCsvStatus() } /** * 读取CSV文件加载历史做题状态 */ private fun readCsvStatus() { val csvFile = getFileStreamPath(csvFileName) // 文件不存在直接使用默认全0状态 if (!csvFile.exists()) return try { openFileInput(csvFileName).use { inputStream -> val fileContent = inputStream.bufferedReader().use { reader -> reader.readLine() ?: return } val valueList = fileContent.split(",") // 遍历赋值,跳过越界、格式错误的值 for (index in valueList.indices) { if (index in 1..20) { chk_Q[index] = valueList[index].toIntOrNull() ?: 0 } } } } catch (e: Exception) { // 读取异常时重置为初始状态 chk_Q = IntArray(21) { 0 } } } /** * 把当前做题状态写入CSV文件 * 每次修改chk_Q数组的值后调用即可 */ private fun saveCsvStatus() { val csvLine = chk_Q.joinToString(separator = ",") openFileOutput(csvFileName, Context.MODE_PRIVATE).use { outputStream -> outputStream.bufferedWriter().use { writer -> writer.write(csvLine) } } } }
调用说明
- 应用启动时会在
onCreate阶段自动调用readCsvStatus()加载历史状态,不需要额外操作 - 每次完成题目、给对应索引的
chk_Q赋值为2之后,直接调用saveCsvStatus()即可把最新状态写入CSV,应用关闭重开后数据不会重置 - 生成的CSV文件为标准逗号分隔格式,从应用私有目录导出后可直接用Excel、WPS等表格软件打开编辑
提示:因为存储场景仅为固定长度的数值存储,不需要引入第三方CSV解析库,原生实现代码量最少、兼容性最高,复制后不需要修改任何依赖配置即可运行。
内容的提问来源于stack exchange,提问作者Surlofia
相关产品推荐
相关产品推荐

