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

Kotlin Android项目中无法读取JSON文件的问题求助

解决Android环境中读取JSON文件的"FileNotFoundException"问题

问题根源分析

你的两段代码在Android环境失效的原因分别是:

  1. 本地Windows路径无法在Android使用:
    Android基于Linux内核,设备中不存在C:/Users/admin/Document/sample.json这类Windows文件路径,直接用该路径必然找不到文件。
  2. Assets目录路径错误:
    Assets目录的文件访问路径是相对于src/main/assets根目录的,../res/sample.json这种相对路径无效——res和assets是APK中平级的资源目录,无法通过assets的open()方法跨目录访问res文件。

正确解决方案

方案1:读取Assets目录中的JSON文件

  1. 确保sample.json放在Android项目的src/main/assets目录下(如果没有assets文件夹,手动创建)。
  2. 使用以下代码读取:
    val jsonString = applicationContext.assets.open("sample.json")
        .bufferedReader()
        .use { it.readText() }
    println(jsonString)
    

方案2:读取外部存储中的JSON文件

如果你的JSON文件在设备外部存储中,注意Android版本的存储权限差异:

  • Android 10及以上:requestLegacyExternalStorage仅在Android 10有效,Android 11+已废弃。推荐使用应用私有外部存储(无需额外权限):
    val externalFilesDir = applicationContext.getExternalFilesDir(null)
    val jsonFile = File(externalFilesDir, "sample.json")
    
    if (jsonFile.exists()) {
        val jsonString = jsonFile.readText()
        println(jsonString)
    } else {
        // 处理文件不存在的情况
    }
    
  • 若需访问公共外部存储的文件,需使用**存储访问框架(SAF)**让用户手动选择文件,或者针对媒体文件使用MediaStore API。

补充:读取res/raw目录的JSON文件

如果把JSON放在res/raw目录下(需创建raw文件夹),可以用资源ID读取:

val inputStream = resources.openRawResource(R.raw.sample)
val jsonString = inputStream.bufferedReader().use { it.readText() }
println(jsonString)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 19:40:57