You need to enable JavaScript to run this app. Android Kotlin 如何从文本文件读取单词数据,实现按钮每点击一次读取下一行内容
优惠活动
大模型
产品
解决方案
定价
更多

Android Kotlin 如何从文本文件读取单词数据,实现按钮每点击一次读取下一行内容

实现点击按钮逐行读取文本单词的方案

核心逻辑说明

实现该功能的核心是避免每次按钮点击都重复打开文件从头读取,需要把文件内容提前加载到内存,同时维护一个记录当前读取位置的游标,每次点击时移动游标取下一行内容即可。


具体实现步骤

  • 第一步:准备单词文件
    最常用的存放位置是app的assets目录,新建名为words.txt的文本文件,每一行单独存储一个单词,保证文件编码为UTF-8,避免读取乱码。
  • 第二步:在页面组件(Activity/Fragment)中声明全局状态变量
    用来缓存加载好的全部单词、记录当前读取到的位置索引:
    // 缓存全部单词的列表
    private lateinit var wordList: List<String>
    // 当前读取位置的索引,初始值-1代表尚未开始读取
    private var currentLineIndex = -1
    
  • 第三步:在页面初始化阶段一次性加载全量文件内容
    选择在页面生命周期的初始化节点(比如onCreate方法中)完成文件读取,不要放在按钮点击回调里,减少重复IO带来的卡顿:
    // 从assets目录加载单词文件,use块会自动关闭文件流,避免内存泄漏
    wordList = application.assets.open("words.txt").bufferedReader().use { bufferReader ->
        bufferReader.readLines()
    }
    
  • 第四步:给按钮绑定点击逻辑,实现逐行读取
    每次点击时把读取索引向后移动一位,取出对应行的单词做展示,同时做好边界判断,避免越界崩溃:
    nextWordBtn.setOnClickListener {
        // 读取索引向后移动
        currentLineIndex += 1
        // 边界判断:如果已经读到文件最后一行,按业务需求做兜底处理
        if (currentLineIndex >= wordList.size) {
            // 可选逻辑:循环回到文件开头重新读取,或者弹出“没有更多单词”的提示
            currentLineIndex = 0
        }
        // 取出当前行的单词,展示到界面组件上
        val targetWord = wordList[currentLineIndex]
        wordShowTv.text = targetWord
    }
    

常见问题提醒

  • 绝对不要把打开文件、读取全量内容的逻辑写在按钮点击回调里,否则每次点击都会重置文件读取位置,永远只能读到文件第一行的内容,还会因为频繁文件IO造成界面卡顿。
  • 必须加索引的边界判断,否则读到文件末尾继续点击时,会抛出数组越界的运行时崩溃。
  • 如果单词文件体量极大(比如十万行以上,占用内存超过10MB),不建议一次性全量加载到内存,可以使用RandomAccessFile记录上次读取到的文件字节偏移位置,每次点击时从偏移位置开始读取下一行,再更新偏移量,降低内存占用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 09:06:07