Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 只读文件系统_Android_Image_File_Permissions_Png - Fatal编程技术网

Android 只读文件系统

Android 只读文件系统,android,image,file,permissions,png,Android,Image,File,Permissions,Png,我正在尝试将png文件存储在手机的内存中,但遇到了一些困难 我正在使用以下代码: private void storeImage(Bitmap image, String nombre) { try { File file = new File(name + ".png"); file.createNewFile(); FileOutputStream fos = new FileOutputStream(file); im

我正在尝试将png文件存储在手机的内存中,但遇到了一些困难

我正在使用以下代码:

private void storeImage(Bitmap image, String nombre) {
    try {
        File file = new File(name + ".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文件


谢谢

编辑:自kitkat使用
Environment.getExternalStorageDirectory()以来以支持
它返回主共享/外部存储设备上的目录的绝对路径,应用程序可以将其拥有的永久文件放在该目录中。这些文件是应用程序的内部文件,通常不作为介质对用户可见。卸载应用程序后,此目录及其内容将被删除,您将无法使用
写入\u外部\u存储
权限使用返回的目录

您试图在只读的
/
中写入的代码。如果要将位图存储在SD卡中,必须更改:

File file = new File(nombre+".png");
进入:

这两行将尝试将
nombre+“.png”
写入SD卡的根目录,以某种方式污染了后者。该文件将保留在那里,直到您手动删除它,并且您手机上安装的所有应用程序都可以访问该文件。在电脑上安装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
)。因为它是私有的,所以只有你的应用才能访问它。唯一的例外是如果你有一个根手机

要检索它,您必须使用:

final FileInputStream fis = openFileOutput(nombre+".png", Context.MODE_PRIVATE);

你必须添加许可证。谢谢!!但我并不想将文件存储在根目录中,也不想将其存储在外部SD中,我想将其存储在内部内存中,在应用程序的存储空间中,在/data/data/package/file/中。有可能吗?好的!!我可以创建文件!!谢谢如果你澄清了你给出的外部示例和内部示例之间的区别,这将是一个很好的答案,但实际上,你已经以一种非常混乱的方式将它们两个一起运行了。@ChrisStratton感谢你的反馈。我更新了答案
final FileInputStream fis = openFileOutput(nombre+".png", Context.MODE_PRIVATE);