尝试在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卡