尝试在Android中创build文件:打开失败:EROFS(只读文件系统)

这一行:

final FileOutputStream outputStream = new FileOutputStream(name); 

导致FileNotFoundException ,消息是/2ozjfFQzwv: open failed: EROFS (Read-only file system)其中“2ozjfFQzwv”是我作为文件的名称传递的。

我已经试过这个和没有WRITE_INTERNAL_STORAGE权限。 我如何创build这个文件的写作?

另外,我只是希望能够给一个新的活动提供一个图像,而且它太大而无法在一个额外的序列化中。 有没有比写入文件,然后再读取一个更简单的方法? 这里的所有问题似乎都是关于写入SD卡,我不想这样做,因为很多人没有SD卡插槽。

我已经试过这个和没有WRITE_INTERNAL_STORAGE权限。

Android中没有WRITE_INTERNAL_STORAGE权限。

我如何创build这个文件的写作?

如果您的应用程序以超级用户权限运行,您可能不会(除了在根设备上)。 您正试图写入内部存储的根目录,哪些应用程序无权访问。

请使用带File对象的FileOutputStream构造函数的版本。 根据您可以写入的某个位置创build该File对象,例如:

  • getFilesDir() (在您的Activity或其他Context调用)
  • getExternalFilesDir() (在您的Activity或其他Context调用)

后者将需要WRITE_EXTERNAL_STORAGE作为权限。

有没有比写入文件,然后再读取一个更简单的方法?

你可以暂时把它放在一个静态数据成员中。

因为很多人没有SD卡插槽

“SD卡插槽”是无关紧要的,大体上。 99%的Android设备用户将拥有外部存储空间 – 例外的是4年前的用户移除SD卡的设备。 自2010年年中以来生产的器件具有外部存储器作为板载闪存的一部分,而不是可移动介质。

尝试使用WRITE_EXTERNAL_STORAGE的权限您应该使用是否有外部卡或不。

这适用于我:

 path = Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_MOVIES); File file = new File(path, "/" + fname); 

并将我的文件放在适当的文件夹中

添加

  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

在体现和使用马丁:

 path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES); File file = new File(path, "/" + fname); 

有效。

这里是来自android开发人员的简单示例。

基本上,你可以像这样在内部存储器中写入一个文件:

 String FILENAME = "hello_file"; String string = "hello world!"; FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); fos.write(string.getBytes()); fos.close(); 

正如其他人所提到的,Android上的应用程序不能将文件写入任何文件夹的内部存储,但他们自己的私人存储(这是在/ data / data / PACKAGE_NAME)。

您应该使用API​​来获取适用于您的应用的正确path。

读这个 。

Google限制了对外部SD卡的写入权限。 在API 19中,有一个名为“存储访问框架”的框架,允许您设置“合同”来允许写入权限。

更多信息:

Android – 如何使用新的存储访问框架将文件复制到外部SD卡