2013-07-25 108 views
2

我试图在手机的内部存储器中存储一个PNG文件,但尝试了很多不同的方法后,我遇到了很多问题。只读文件系统

I'm使用此代码:

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

但doesn't工作,因为我得到这个消息logcat中:

访问文件时出错:打开失败:EROFS(只读文件系统)

我不知道如何更改文件的权限,或者如果有更好的方法来保存在手机中的PNG文件。

谢谢!

+0

<使用许可权的android:NAME = “android.permission.WRITE_EXTERNAL_STORAGE”/><使用许可权的android:NAME =“android.permission.WRITE_INTERNAL_STORAGE “/>你必须添加权限 –

回答

4

编辑:因为奇巧使用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)该应用的私人空间的文件。由于它的私人只有你的应用程序将能够访问它。唯一的例外是如果你有一个根深蒂固的手机。

找回它,你必须使用:

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

Okey谢谢!但我并不是真的想将文件存储在根目录中,我不想将其存储在externalSD中,我想将它存储在内存中,存储在我的应用程序存储空间中的/ data /数据/包/文件/。这将是可能的? –

+0

是的,有可能,我编辑了我的答案 – Blackbelt

+0

Okey!我可以创建该文件!谢谢! –

相关问题