Android项目中javaClass.getResourceAsStream返回null求助
问题原因及解决方案
你的问题出在Android项目的资源路径规则和普通Java项目不同,以及getResourceAsStream的用法错误:
路径写法错误:
src/main/resources/credentials.json是你本地项目的源码路径,但Android构建后,resources目录下的文件会被打包到APK的类路径根目录中,而非保留原目录结构。用完整的源码路径查找,自然找不到文件。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
相关产品推荐
相关产品推荐

