Je veux enregistrer un fichier sur la mémoire interne dans un dossier spécifique. Mon code est:
File mediaDir = new File("media");
if (!mediaDir.exists()){
mediaDir.createNewFile();
mediaDir.mkdir();
}
File f = new File(getLocalPath());
f.createNewFile();
FileOutputStream fos = new FileOutputStream(f);
fos.write(data);
fos.close();
getLocalPath
renvoie /data/data/myPackage/files/media/qmhUZU.jpg
mais lorsque je veux créer le dossier de support, l'exception "Java.io.IOException: système de fichiers en lecture seule" est générée. Des idées sur la façon d'écrire mes fichiers sur le stockage interne du téléphone dans le support de dossier? Merci.
Vous devriez utiliser ContextWrapper comme ceci:
ContextWrapper cw = new ContextWrapper(context);
File directory = cw.getDir("media", Context.MODE_PRIVATE);
Comme toujours, reportez-vous à documentation , ContextWrapper a beaucoup à offrir.
Vous devez créer le répertoire media
ajouté à ce que getLocalPath()
renvoie.
J'avais aussi la même erreur exacte. Voici le correctif. Lorsque vous indiquez où écrire, Android résoudra automatiquement votre chemin en /data/
ou /mnt/sdcard/
. Laisse-moi expliquer.
Si vous exécutez l'instruction suivante:
File resolveMe = new File("/data/myPackage/files/media/qmhUZU.jpg");
resolveMe.createNewFile();
Cela résoudra le chemin d'accès à la racine /data/
quelque part plus haut dans Android.
Je l'ai compris, car après avoir exécuté le code suivant, il a été automatiquement placé dans la racine /mnt/
sans que je traduise quoi que ce soit par moi-même.
File resolveMeSDCard = new File("/sdcard/myPackage/files/media/qmhUZU.jpg");
resolveMeSDCard.createNewFile();
Une solution rapide serait de changer votre code suivant:
File f = new File(getLocalPath().replace("/data/data/", "/"));
J'espère que cela t'aides
Écrire un fichier
Lors de l'enregistrement d'un fichier dans la mémoire interne, vous pouvez acquérir le répertoire approprié en tant que fichier en appelant l'une des deux méthodes suivantes:
getFilesDir ()
Returns a File representing an internal directory for your app.
getCacheDir ()
Returns a File representing an internal directory for your
app's temporary cache files.
Be sure to delete each file once it is no longer needed and implement a reasonable
size limit for the amount of memory you use at any given time, such as 1MB.
Attention: Si le système manque de stockage, il est possible que vos fichiers de cache soient supprimés sans avertissement.