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

Android中使用resources.openRawResource读取raw文件失败求助

解决resources.openRawResource找不到raw文件的问题

你的问题核心出在导入了错误的R类,另外还有几个细节需要调整,具体如下:

1. 错误的R类导入导致资源找不到

你代码里第一行导入的是import android.R,这是Android系统自带的资源类,而你自己的grewords.txt属于项目自定义资源,应该引用你项目专属的R类(即com.example.vocabquiz.R)。

解决方法:

  • 删除import android.R这一行
  • 确保代码中导入的是自己项目的R类,若IDE未自动导入,可手动添加import com.example.vocabquiz.R

2. 检查raw文件和文件夹规范

  • 确认raw文件夹创建在app/src/main/res目录下,位置不能错
  • 文件名必须全小写,不能包含空格、大写字母或特殊字符(你的grewords.txt符合要求,这点没问题可忽略)

3. 局部函数的调用问题

你把readDictionaryFile()定义在了onCreate()方法内部,属于局部函数,不仅外部无法调用,而且当前代码也没有执行这个方法去读取文件。需要把它移到onCreate()外面作为成员函数,或者在onCreate()内部调用它。

修正后的代码示例

package com.example.vocabquiz

// 删除错误的import android.R,使用项目自身的R类(IDE通常会自动导入)
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ArrayAdapter
import com.example.vocabquiz.databinding.ActivityMainBinding
import java.io.InputStream
import java.util.Random
import java.util.Scanner

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding
    private val defns = ArrayList<String>()
    private lateinit var myadapter : ArrayAdapter<String>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        setupList()
        // 调用读取文件的方法
        readDictionaryFile()

        binding.definitionsList.setOnItemClickListener { _, _, index, _ ->
            defns.removeAt(index)
            myadapter.notifyDataSetChanged()
        }
    }

    // 移到onCreate外作为成员函数
    private fun readDictionaryFile() {
        try {
            val inputStream: InputStream = resources.openRawResource(R.raw.grewords)
            // 示例:用Scanner读取文件内容
            val scanner = Scanner(inputStream)
            while (scanner.hasNextLine()) {
                val line = scanner.nextLine()
                // 可根据需求处理每行内容,比如添加到列表
                println(line)
            }
            scanner.close()
            inputStream.close()
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }

    fun setupList() {
        val list = ArrayList<String>()
        list.add("Hello")
        list.add("Rob")
        list.add("BoBoBo")

        val rand = Random()
        val index = rand.nextInt(list.size)
        val word = list[index]

        defns.add("a greeting")
        defns.add("something you say when you are done")
        defns.add("a dude")
        defns.add("another name for a duck")
        defns.add("the President")
        defns.add("nothing at all")
        defns.shuffle()

        myadapter = ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, defns)

        binding.definitionsList.adapter = myadapter
    }
}

额外提示

  • resources.openRawResource()方法至今仍有效,并未被废弃,不是方法本身的问题
  • 处理输入流时建议加try-catch,避免文件读取异常导致程序崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:20:31