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

Android Studio/Kotlin中如何通过R.raw标识符读取res/raw目录CSV文件

使用R.raw.xxx标识符读取res/raw目录CSV文件的Kotlin实现方案

直接用Android SDK提供的资源访问接口即可实现,不需要硬写文件路径,该方案兼容性更强,不会因为项目结构调整、打包变更出现路径找不到的问题。


1. 有Context上下文场景(Activity/Fragment/Service等)直接读取

直接调用resources.openRawResource()传入对应的R.raw资源ID即可获取文件输入流,示例代码如下:

// 将CSV文件读取为完整字符串
val csvInputStream = resources.openRawResource(R.raw.question)
val csvContent = csvInputStream.bufferedReader(Charsets.UTF_8).use { reader ->
    reader.readText()
}

上述代码中的use方法会自动完成流资源的关闭,不需要手动写finally释放IO资源


2. 逐行解析CSV内容示例

如果需要直接拆分CSV内容为结构化数据,可以参考如下实现:

val questionList = mutableListOf<List<String>>()
resources.openRawResource(R.raw.question).bufferedReader(Charsets.UTF_8).forEachLine { line ->
    // 此处为简易拆分逻辑,若CSV包含带引号的逗号、换行等特殊字符,建议使用opencsv等专用解析库处理
    val rowData = line.split(",")
    questionList.add(rowData)
}

3. 普通无Context类的读取方案

如果需要在自定义的非Android组件类中读取资源,将Context作为参数传入即可,不要使用全局静态Context避免内存泄漏:

// 示例:问答数据仓库类
class QuestionRepo(private val context: Context) {
    fun loadAllQuestions(): List<List<String>> {
        val result = mutableListOf<List<String>>()
        context.resources.openRawResource(R.raw.question).bufferedReader().useLines { lines ->
            lines.forEach { line ->
                result.add(line.split(","))
            }
        }
        return result
    }
}

注意:res/raw下的资源文件名只能使用小写字母、数字和下划线,否则会导致R文件无法生成对应资源ID


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:51:03