Ich möchte eine Datei im internen Speicher in einem bestimmten Ordner speichern. Mein Code lautet:
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
gibt /data/data/myPackage/files/media/qmhUZU.jpg
zurück, aber wenn ich den Medienordner erstellen möchte, erhalte ich die Ausnahme "Java.io.IOException: Schreibgeschütztes Dateisystem". Irgendwelche Ideen, wie ich meine Dateien auf internen Telefonspeicher in Ordner-Medien schreiben kann? Vielen Dank.
Sie sollten ContextWrapper wie folgt verwenden:
ContextWrapper cw = new ContextWrapper(context);
File directory = cw.getDir("media", Context.MODE_PRIVATE);
Wie immer siehe documentation , ContextWrapper hat viel zu bieten.
Sie sollten das media
-Verzeichnis erstellen, das an das angehängt wird, was getLocalPath()
zurückgibt.
Ich habe genau den gleichen Fehler erhalten. Hier ist der Fix. Wenn Sie angeben, wo geschrieben werden soll, löst Android Ihren Pfad automatisch in /data/
oder /mnt/sdcard/
auf. Lassen Sie mich erklären.
Wenn Sie die folgende Anweisung ausführen:
File resolveMe = new File("/data/myPackage/files/media/qmhUZU.jpg");
resolveMe.createNewFile();
Der Pfad zum Stammverzeichnis /data/
wird irgendwo höher in Android aufgelöst.
Ich habe das herausgefunden, denn nachdem ich den folgenden Code ausgeführt hatte, wurde er automatisch in das Stammverzeichnis /mnt/
eingefügt, ohne dass ich selbst etwas übersetzen musste.
File resolveMeSDCard = new File("/sdcard/myPackage/files/media/qmhUZU.jpg");
resolveMeSDCard.createNewFile();
Eine schnelle Lösung wäre, den folgenden Code zu ändern:
File f = new File(getLocalPath().replace("/data/data/", "/"));
Hoffe das hilft
Schreibe eine Datei
Beim Speichern einer Datei im internen Speicher können Sie das entsprechende Verzeichnis als Datei abrufen, indem Sie eine der beiden folgenden Methoden aufrufen:
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.
Achtung: Wenn der Speicher knapp wird, werden möglicherweise die Cache-Dateien ohne Warnung gelöscht.