我试图将png文件存储在手机的内部存储器中,但在尝试了很多不同的方法之后我遇到了很多问题。
我正在使用此代码:
private void storeImage(Bitmap image, String nombre) {
try {
File file = new File(nombre+".png");
file.createNewFile();
FileOutputStream fos = new FileOutputStream(file);
image.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.close();
} catch (FileNotFoundException e) {
Log.d(TAG, "File not found: " + e.getMessage());
} catch (IOException e) {
Log.d(TAG, "Error accessing file: " + e.getMessage());
}
}
但它不起作用,因为我收到了这条LogCat消息:
访问文件时出错:打开失败:EROFS(只读文件系统)
我不知道如何更改文件的权限,或者是否有更好的方法可以在手机中保存png文件。
谢谢!
答案 0 :(得分:4)
编辑:因为kitkat不鼓励使用Environment.getExternalStorageDirectory();
,所以赞成使用Context.getExternalFilesDir
它返回主共享/外部存储设备上目录的绝对路径,应用程序可以在其中放置它拥有的持久文件。这些文件是应用程序的内部文件,通常不会被用户视为媒体。卸载应用程序后将删除此目录及其内容,WRITE_EXTERNAL_STORAGE
不会使用返回目录的权限。
您所拥有的代码正试图在/
内写入,这是只读的。如果要将位图存储在SD卡中,则必须更改:
File file = new File(nombre+".png");
成:
File root = Environment.getExternalStorageDirectory();
File file = new File(root, nombre+".png");
这两行将尝试将nombre+".png"
写入您的SD卡的根目录,以某种方式污染后者。该文件将保留在那里,直到您手动删除它,手机上安装的所有应用程序都可以访问该文件。在您的电脑上或使用文件浏览器安装SD卡也可以访问它。
这些行:
final FileOutputStream fos = openFileOutput(nombre+".png", Context.MODE_PRIVATE);
image.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.close();
将文件写入内部存储(/data/data/you.app.name
)中的应用私有空间。由于它是私人的,只有您的应用程序才能访问它。唯一的例外是如果你有一个root电话。
要检索它,你必须使用:
final FileInputStream fis = openFileOutput(nombre+".png", Context.MODE_PRIVATE);