无法从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
相关产品推荐
相关产品推荐

