Android开发如何将Bitmap保存到本地?存储路径在哪里?
你当前代码的文件存储路径
你调用的context.openFileOutput()是Android系统提供的应用私有内部存储写入API,生成的文件默认存放在应用私有目录下:
- 通用路径格式:
/data/data/[你的应用包名]/files/BitMapFileSave - 部分高版本Android系统上会显示为软链接路径
/data/user/0/[你的应用包名]/files/BitMapFileSave,和上述路径指向同一个存储位置,没有区别。
你找不到文件的核心原因有两个:
- 这个目录是应用私有目录,没有root权限的普通文件管理器、系统相册都没有访问权限,默认看不到里面的文件
- 你代码里写的文件名是
BitMapFileSave,没有加.png后缀,就算找到文件也不会被系统识别为图片文件。
你可以通过Android Studio自带的Device File Explorer工具,在调试时直接进入对应应用包名的files目录查看保存的文件,不需要root权限。
关于保存到类似app/res/drawable路径的说明
app/res/drawable是APK编译打包时生成的只读资源目录,APK安装后这个目录的内容是完全固定的,应用运行时没有任何写入权限,不可能往这个路径保存文件。
如果你需要存储应用内使用的图片资源,有两个可落地方案:
- 方案1:继续使用内部私有目录存储,也就是你现在用的files目录,只需要给文件名加上对应图片后缀即可,保存的文件只有你的应用自身可以访问,卸载应用时会同步删除,不会残留垃圾文件。
- 方案2:如果需要让其他应用(比如系统相册、文件管理器)也能访问到这张图片,就使用MediaStore API将图片写入系统公共Pictures目录,这种方式需要根据系统版本申请对应存储权限,保存后所有应用都可以查看图片。
修正后的可正常识别为PNG图片的内部存储保存代码如下:
try { // 文件名加上.png后缀 val fileName = "BitMapFileSave.png" val fileOutputStream: FileOutputStream = context!!.openFileOutput(fileName, Context.MODE_PRIVATE) viewBitMap.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream) // 刷新缓冲区确保数据全部写入文件 fileOutputStream.flush() fileOutputStream.close() // 调试时可打印实际存储路径 val realSavePath = File(context.filesDir, fileName).absolutePath Log.d("BitmapSave", "文件实际保存路径:$realSavePath") } catch (e: Exception) { e.printStackTrace() }
内容的提问来源于stack exchange,提问作者chrisChris
相关产品推荐
相关产品推荐

