it-swarm.com.de

So erstellen Sie eine Datei auf dem internen Android-Speicher

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.

25
Buda Gavril

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.

22
Audrius

Sie sollten das media-Verzeichnis erstellen, das an das angehängt wird, was getLocalPath() zurückgibt.

2
Lucas S.

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

2
styler1972

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.

0
Magnetron