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

Android Studio中TSAGeoMag.java的getResourceAsStream()调用异常问题

解决Android中读取WMM.COF文件的FileNotFoundException问题

核心问题分析

你之前的尝试都没命中Android资源打包和访问的规则:

  • getResourceAsStream() 依赖Java类路径,但Android不会把Java文件同目录的非代码文件、res文件夹里的自定义文件打包到类路径中;res目录是用于Android标准资源(布局、图片等)的,这类文件会被系统处理重命名,无法直接通过文件名读取。
  • 硬编码电脑本地绝对路径完全无效:Android应用运行在独立的沙盒环境中,根本无法访问宿主电脑的文件系统。
  • 权限问题:不需要添加任何Manifest权限,因为你要读取的是APP自身打包的资源,不属于外部存储访问范畴。

正确解决方案

1. 放置文件到assets目录

在你的Android Studio项目中,创建src/main/assets目录(和java、res目录同级),将WMM.COF文件放入该目录。Android会自动将assets目录下的文件原封不动打包到APK中。

2. 使用AssetManager读取文件

Android提供AssetManager专门用于读取assets目录下的资源,示例代码如下:

// 在Activity或拥有Context的组件中获取AssetManager
AssetManager assetManager = getAssets();
try {
    InputStream input = assetManager.open("WMM.COF");
    // 将input传入TSAGeoMag类进行后续处理
    // 比如:TSAGeoMag geoMag = new TSAGeoMag(input);
} catch (IOException e) {
    e.printStackTrace();
    throw new FileNotFoundException("WMM.COF not found in assets directory");
}

如果你的TSAGeoMag类是第三方类,没有直接接收Context的方法,建议在调用它的地方先通过AssetManager获取输入流,再将流传入该类的构造方法或初始化方法中。

额外注意事项

  • 确保assets目录的创建位置正确:必须是src/main/assets,否则Android Gradle插件不会识别并打包该目录。
  • 检查文件名大小写:Android的assets文件名区分大小写,确保代码中使用的文件名和实际文件完全一致(包括大小写)。

内容的提问来源于stack exchange,提问作者James L.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:35:19