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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 23:54:32