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

<p>эта строка:</p><pre><code>final fileoutputstream outputstream = new fileoutputstream(name); </code></pre><p>в результате получается <code>filenotfoundexception</code> с сообщением <code>/2ozjffqzwv: open failed: erofs (read-only file system)</code>, где «2ozjffqzwv» - это то, что я передал как имя файла.</p><p>я пробовал это с и без разрешения <code>write\_internal\_storage</code>. как мне создать этот файл для записи?</p><p>в качестве альтернативы, я просто хочу иметь возможность дать изображение новому действию, и оно слишком велико, чтобы сериализовать его дополнительно. есть ли более простой способ, чем записать его в файл и снова прочитать из него? все вопросы здесь, похоже, касаются записи на sd-карту, но я не хочу этого делать, потому что у многих людей нет слотов для sd-карт.</p>

<blockquote> <p>я пробовал это с и без разрешения write\_internal\_storage.</p> </blockquote><p>в android нет разрешения <code>write\_internal\_storage</code>.</p><blockquote> <p>как мне создать этот файл для записи?</p> </blockquote><p>если вы используете приложение с привилегиями суперпользователя, вы можете этого не делать, за исключением, возможно, на рутированном устройстве. вы пытаетесь записать в корень внутреннего хранилища, к которому приложения не имеют доступа.</p><p>пожалуйста, используйте версию конструктора <code>fileoutputstream</code>, которая принимает объект <code>file</code>. создайте этот объект <code>file</code> на основе некоторого местоположения, в которое вы можете записать, например:</p><ul> <li><code>getfilesdir()</code> (вызывается на <code>activity</code> или другую <code>context</code>)</li> <li><code>getexternalfilesdir()</code> (вызывается на <code>activity</code> или другую <code>context</code>)</li> </ul><p>последний будет требовать <code>write\_external\_storage</code> в качестве разрешения.</p><blockquote> <p>есть ли более простой способ, чем записать его в файл и снова прочитать из него?</p> </blockquote><p>вы можете временно поместить его в статический член данных.</p><blockquote> <p>потому что многие люди не имеют слотов для sd-карт</p> </blockquote><p>«слоты для sd-карт» не имеют значения, по большому счету. 99% пользователей устройств android будут иметь внешнее хранилище - исключение составляют устройства старше 4 лет, где пользователь удалил свою sd-карту. устройства, выпускаемые с середины 2010 года, имеют внешнее хранилище как часть встроенной флэш-памяти, а не как съемный носитель.</p>

<p>попробуйте использовать разрешение write\_external\_storage вы должны использовать это независимо от того, есть ли внешняя карта или нет.</p><p>это хорошо работает для меня:</p><pre><code>path = environment.getexternalstoragepublicdirectory( environment.directory\_movies); file file = new file(path, "/" + fname); </code></pre><p>и помещает мои файлы в соответствующую папку</p>

<p>вот простой пример от <a href="http://developer.android.com/guide/topics/data/data-storage.html#filesinternal">разработчика android</a> .</p><p>по сути, вы можете записать файл во внутреннюю память следующим образом:</p><pre><code>string filename = "hello\_file"; string string = "hello world!"; fileoutputstream fos = openfileoutput(filename, context.mode\_private); fos.write(string.getbytes()); fos.close(); </code></pre>

<p>добавление </p><pre><code> <uses-permission android:name="android.permission.write\_external\_storage" /> <uses-permission android:name="android.permission.read\_external\_storage" /> </code></pre><p>в манифесте и использовании так же, как мартин:</p><pre><code>path = environment.getexternalstoragepublicdirectory(environment.directory\_movies); file file = new file(path, "/" + fname); </code></pre><p>это сработало.</p>

<p>как уже упоминали другие, приложение на android не может записать файл в какую-либо папку во внутреннем хранилище, кроме собственного частного хранилища (которое находится в/data/data/package\_name).</p><p>вы должны использовать api, чтобы получить правильный путь, разрешенный для вашего приложения.</p><p>прочитайте <a href="http://developer.android.com/guide/topics/data/index.html">это</a> .</p>

<p>google ограничил доступ на запись к внешней sd-карте. из api 19 существует платформа, называемая storage access framework, которая позволяет вам устанавливать «контракты», чтобы разрешить доступ для записи.</p><p>для дальнейшей информации:</p><p> <a href="https://stackoverflow.com/questions/36023334/android-how-to-use-new-storage-access-framework-to-copy-files-to-external-sd-c">android - как использовать новую среду storage access framework для копирования файлов на внешнюю sd-карту</a> </p>