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

Android项目中javaClass.getResourceAsStream返回null求助

问题原因及解决方案

你的问题出在Android项目的资源路径规则和普通Java项目不同,以及getResourceAsStream的用法错误:

  1. 路径写法错误:src/main/resources/credentials.json是你本地项目的源码路径,但Android构建后,resources目录下的文件会被打包到APK的类路径根目录中,而非保留原目录结构。用完整的源码路径查找,自然找不到文件。

  2. Android标准资源目录的选择:Android中更推荐将这类自定义文件放在src/main/assets目录下(如果没有这个目录,直接在main文件夹下创建即可,和res目录同级),用AssetManager读取会更直观。

正确的实现方式

方法一:用Assets目录(推荐)

  • 把credentials.json移动到src/main/assets目录下
  • 使用AssetManager读取文件:
// 如果在Activity/Fragment中
private var input: InputStream? = null

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    try {
        input = assets.open("credentials.json")
        // 这里处理输入流
    } catch (e: IOException) {
        e.printStackTrace()
    }
}

// 如果在自定义类中,需要传入Context
class MyCustomClass(private val context: Context) {
    fun getCredentialsStream(): InputStream? {
        return try {
            context.assets.open("credentials.json")
        } catch (e: IOException) {
            e.printStackTrace()
            null
        }
    }
}

方法二:保留在resources目录(不推荐)

如果坚持放在src/main/resources下,路径要改为类路径相对路径:

// 路径前的斜杠表示类路径根目录,确保文件被打包到根目录下
private var input = javaClass.getResourceAsStream("/credentials.json")

额外注意事项

  • 确保文件在构建时被正确打包:检查Module级别的build.gradle,默认Android插件会自动处理resources目录,若有自定义配置,要确认sourceSets.main.resources.srcDirs包含src/main/resources。
  • 读取文件时必须处理IOException,避免程序崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:05:24