繁体   English   中英

只读文件系统

[英]Read-only file system

我正在尝试将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(); 不建议使用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"写入sdcard的根目录,从而以某种方式污染后者。 该文件将保留在那里,直到您手动删除它为止,并且手机上安装的所有应用程序都可以访问该文件。 在PC上安装sdcard或使用文件浏览器也可以访问它。

这些行:

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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM