Попытка создать файл в Android: открыть не удалось: EROFS (файловая система только для чтения)

эта строка:

final FileOutputStream outputStream = new FileOutputStream(name);

результаты FileNotFoundException с сообщением /2ozjfFQzwv: open failed: EROFS (Read-only file system) где "2ozjfFQzwv" - это то, что я передал как имя файла.

Я пробовал С и без WRITE_INTERNAL_STORAGE разрешения. Как создать этот файл для записи?

альтернативно, я просто хочу иметь возможность дать изображение для нового действия, и он слишком велик, чтобы сериализовать его в дополнительном. Есть ли более простой способ, чем записать его в файл, а затем снова прочитать из него? Все вопросы здесь, похоже, касаются записи на SD-карту, чего я не хочу делать, потому что у многих людей нет слотов для SD-карт.

6 ответов


я пробовал это с и без разрешения WRITE_INTERNAL_STORAGE.

нет WRITE_INTERNAL_STORAGE разрешение в Android.

как создать этот файл для записи?

нет, разве что на корневое устройство, если ваше приложение работает с привилегиями суперпользователя. Вы пытаетесь записать в корень внутренней памяти, какие приложения не имеют доступа к.

пожалуйста используйте версию из FileOutputStream конструктор, который принимает


попробуйте использовать разрешение 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, чтобы получить правильный путь для вашего приложения.

читать этой .


Google ограничили доступ для записи на внешнюю sdcard. Из API 19 существует фреймворк под названием Storage Access Framework, который позволяет настроить "контракты", чтобы разрешить доступ на запись.

дополнительная информация:

Android-Как использовать новую структуру доступа к хранилищу для копирования файлов на внешнюю sd-карту