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

无法从Raw文件夹获取路径 报java.nio.file.NoSuchFileException错误

问题根因

你当前的写法错误核心是混淆了安卓专属资源URI和本地文件系统路径的区别:

  • 你定义的android.resource://com.example.testproject/raw/binary_code是安卓特有的资源定位符,不属于标准文件路径协议,调用uri.getPath()只能提取到/raw/binary_code这个路径片段,该路径在系统文件目录中并不存在,因此触发NoSuchFileException
  • 所有res/目录下的资源都会被打包进APK安装包,不会作为独立文件暴露在系统公共文件系统中,无法直接通过Java NIO的文件API直接读取
正确实现方式

方案1:通过资源ID直接读取(性能最优,推荐)

try (InputStream inputStream = getResources().openRawResource(R.raw.binary_code)) {
    byte[] encoded = new byte[inputStream.available()];
    inputStream.read(encoded);
    // 后续处理encoded字节数组
} catch (IOException e) {
    Log.e(TAG, "读取raw资源失败: ", e);
}

方案2:通过资源URI读取(适配你现有常量定义的写法)

Uri uri = Uri.parse(Constants.PATH_TO_BINARY_CONTRACT);
try (InputStream inputStream = getContentResolver().openInputStream(uri)) {
    byte[] encoded = new byte[inputStream.available()];
    inputStream.read(encoded);
    // 后续处理encoded字节数组
} catch (IOException e) {
    Log.e(TAG, "读取raw资源失败: ", e);
}
注意事项
  • 上面的示例使用了try-with-resources语法自动关闭输入流,无需手动调用close(),可以避免IO资源泄漏
  • 如果你的binary_code文件体积较大,不要直接用inputStream.available()一次性分配内存,建议分次读取避免OOM

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:15:07