首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只读文件系统

只读文件系统
EN

Stack Overflow用户
提问于 2013-07-25 13:09:17
回答 1查看 4.1K关注 0票数 3

我试图将一个png文件存储在手机的内部内存中,但我遇到了一些困难。

我用的是这个代码:

代码语言:javascript
复制
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文件存储在电话中。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-25 13:11:54

编辑:由于kitkat不鼓励使用Environment.getExternalStorageDirectory();,所以倾向于使用Context.getExternalFilesDir,它返回主共享/外部存储设备上的目录的绝对路径,应用程序可以在其中放置它所拥有的持久文件。这些文件是应用程序的内部文件,用户通常不能作为媒体看到这些文件。该目录及其内容在卸载应用程序时将被删除,您将不会获得WRITE_EXTERNAL_STORAGE使用返回目录的权限。

您所拥有的代码试图在/中编写,该代码是只读的。如果要将位图存储在SD卡中,则必须更改:

代码语言:javascript
复制
File file = new File(nombre+".png");

转入:

代码语言:javascript
复制
File root = Environment.getExternalStorageDirectory();
File file = new File(root, nombre+".png");

这两行将尝试将nombre+".png"写入sdcard的根目录,从而对后者造成某种程度的污染。该文件将留在那里,直到你手动删除它,并将可以访问所有的应用程序安装在你的手机。将sdcard挂载到您的pc上或使用文件浏览器也可以让您访问它。

这几行:

代码语言:javascript
复制
final FileOutputStream fos = openFileOutput(nombre+".png", Context.MODE_PRIVATE);
image.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.close();

在内部存储(/data/data/you.app.name)中的应用程序私有空间中写入文件。因为它的隐私,只有你的应用程序才能访问它。唯一的例外是如果你有一个有根的手机。

要检索它,您必须使用:

代码语言:javascript
复制
final FileInputStream fis = openFileOutput(nombre+".png", Context.MODE_PRIVATE);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17858975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档