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.
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é votreActivity
ou autreContext
) -
getExternalFilesDir()
(appelé votreActivity
ou autreContext
)
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.
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é
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é.
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();
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 .
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: