Essayer de créer un fichier dans Android: ouvrir échoué :EROFS (Read-only file system))

Cette ligne:

final FileOutputStream outputStream = new FileOutputStream(name);

donne un FileNotFoundException avec le message /2ozjfFQzwv: open failed: EROFS (Read-only file system) où" 2ozjfFQzwv " est ce que j'ai appelé le nom du fichier.

j'ai essayé avec et sans la permission de WRITE_INTERNAL_STORAGE . Comment puis-je créer ce fichier pour l'écriture?

Sinon, je veux juste être en mesure de donner une image à une nouvelle activité, et il est trop grand pour le sérialiser dans un supplément. Est-il un moyen plus facile que de l'écrire dans un fichier puis le lire à nouveau? Toutes les questions ici semblent être à propos d'écrire sur une carte SD, ce que je ne veux pas faire parce que beaucoup de gens n'ont pas de slots de carte SD.

38
demandé sur Jonik 2013-03-30 00:42:22

6 réponses

j'ai essayé avec et sans la permission écrite de stockage interne.

il n'y a pas de WRITE_INTERNAL_STORAGE permission Dans Android.

comment créer ce fichier pour écrire?

vous ne le faites pas, sauf peut-être sur un périphérique enraciné, si votre application fonctionne avec des privilèges de super-utilisateur. Vous essayez d'écrire à la racine du stockage interne, que les applications ne ont accès.

veuillez utiliser la version du constructeur FileOutputStream qui prend un objet File . Créer cet objet File basé sur un endroit où vous pouvez écrire, comme:

  • getFilesDir() (appelé votre Activity ou autre Context )
  • getExternalFilesDir() (appelé votre Activity ou autre Context )

ce dernier exiger WRITE_EXTERNAL_STORAGE comme une autorisation.

Est-il un moyen plus facile que de l'écrire dans un fichier puis le lire à nouveau?

vous pouvez le mettre temporairement dans un membre de données statique.

parce que beaucoup de gens n'ont pas de slots de cartes SD

les "slots de carte SD" ne sont pas pertinents, dans l'ensemble. 99% des utilisateurs D'appareils Android auront un stockage externe -- l'exception sera les appareils de plus de 4 ans où l'Utilisateur a retiré sa carte SD. Les appareils fabriqués depuis la mi-2010 disposent d'un stockage externe dans le cadre de flash embarqué, et non pas en tant que support amovible.

76
répondu CommonsWare 2017-08-18 09:39:00

essayez d'utiliser la permission de WRITE_EXTERNAL_STORAGE Vous devez l'utiliser qu'il y ait ou non une carte externe.

cela fonctionne bien pour moi:

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

et place mes fichiers dans le dossier approprié

14
répondu Martin 2013-03-29 21:40:25

ajouter

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

dans le manifeste et l'utilisation de même que Martin:

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

ça a marché.

5
répondu nobjta_9x_tq 2017-06-12 10:56:18

voici un échantillon simple de développeur android .

en gros, vous pouvez écrire un fichier dans le stockage interne comme ceci:

String FILENAME = "hello_file";
String string = "hello world!";

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();
4
répondu Xuan Wu 2017-08-18 09:40:10

comme d'autres l'ont mentionné, app on Android ne peut pas écrire un fichier dans un dossier du stockage interne, mais leur propre stockage privé (qui est sous /data/data/PACKAGE_NAME ).

Vous devez utiliser l'API pour obtenir le chemin d'accès correct pour votre application.

lire ce .

2
répondu android developer 2013-03-29 21:18:01

Google ont restreint l'accès en écriture à la carte sdcard externe. De L'API 19, Il existe un framework appelé Storage Access Framework qui vous permet de configurer des "contrats" pour permettre l'accès en écriture.

pour en savoir plus:

Android-Comment utiliser le nouveau cadre D'accès au stockage pour copier des fichiers vers la carte SD externe

0
répondu Theo 2017-05-23 10:31:23