Android Studio读取drawable图片时File.exists()返回false怎么办
核心错误原因
你代码里写的/Users/jakesmith/Desktop/Attachments/app/src/main/res/drawable/myimage.png是开发电脑本地的绝对路径,安卓应用运行在模拟器/实体设备上时,设备自身的文件系统里完全不存在这个路径,exists()检测自然永远返回false。
另外res/drawable目录下的资源会在APK编译阶段被打包进安装包,不会以独立可访问的文件形式存在于设备存储中,本身就不支持通过File类按文件路径直接读取。
正确实现方案
- 常规场景直接通过资源ID加载,这是官方推荐的最简实现,不需要手动做文件存在校验、Bitmap解码:
// Android Studio会自动为drawable目录下的myimage.png生成R.drawable.myimage资源ID imageView.setImageResource(R.drawable.myimage)
- 如果你需要拿到Bitmap对象做二次处理,使用
BitmapFactory.decodeResource方法从应用资源中解码,不要用decodeFile:
val myBitmap = BitmapFactory.decodeResource(resources, R.drawable.myimage) // 这里可以对myBitmap做自定义处理 imageView.setImageBitmap(myBitmap)
- 如果你必须依赖
File类的路径校验、文件读写逻辑,请不要把图片放在res/drawable目录:- 可以将图片放到
app/src/main/assets目录下,通过assets.open("myimage.png")获取输入流读取,注意assets内的资源同样没有独立文件路径 - 也可以在APP首次启动时,将资源从APK内拷贝到应用私有存储/外部存储的指定路径,后续再通过
File类访问对应路径即可。
- 可以将图片放到
内容的提问来源于stack exchange,提问作者texasRanger009
相关产品推荐
相关产品推荐

