webentwicklung-frage-antwort-db.com.de

Temporäre Dateien in Android erstellen

Was ist der beste Weg, um eine temporäre Datei in Android zu erstellen? 

Kann File.createTempFile verwendet werden? Die Dokumentation ist sehr vage.

Insbesondere ist nicht klar, wann temporäre Dateien, die mit File.createTempFile erstellt wurden, gelöscht werden.

182
hpique

Das mache ich normalerweise:

File outputDir = context.getCacheDir(); // context being the Activity pointer
File outputFile = File.createTempFile("prefix", "extension", outputDir);

Ich bin mir auch nicht ganz sicher, ob sie gelöscht werden sollen. Da ich dies in meiner Cache-Implementierung verwende, lösche ich die ältesten Dateien manuell, bis die Größe des Cache-Verzeichnisses meinen voreingestellten Wert erreicht.

252
sparkymat

Best Practices für interne und externe temporäre Dateien:

Interner Cache

Wenn Sie einige Daten zwischenspeichern möchten, anstatt sie dauerhaft zu speichern, Sie sollten getCacheDir() verwenden, um eine Datei zu öffnen, die die .__ darstellt. internes Verzeichnis, in dem Ihre Anwendung den temporären Cache speichern soll Dateien.

Wenn der interne Speicherplatz des Geräts nicht ausreicht, kann Android .__ löschen. diese Cache-Dateien, um Speicherplatz wiederherzustellen. Sie sollten sich jedoch nicht auf .__ verlassen. das System, um diese Dateien für Sie zu bereinigen. Sie sollten immer aufrechterhalten die Cache-Dateien selbst und bleiben innerhalb eines angemessenen Speicherbereichs verbraucht, wie 1 MB. Wenn der Benutzer Ihre Anwendung deinstalliert, wird Diese Dateien werden entfernt.

Externer Cache

So öffnen Sie eine Datei, die das externe Speicherverzeichnis darstellt. Sie sollten Cache-Dateien speichern, rufen Sie getExternalCacheDir() auf. Wenn der Benutzer deinstalliert Ihre Anwendung, diese Dateien werden automatisch gelöscht.

Ähnlich wie ContextCompat.getExternalFilesDirs(), oben erwähnt, Sie können auch auf ein Cache-Verzeichnis auf einem sekundären externen Speicher zugreifen (falls verfügbar) durch Aufruf von ContextCompat.getExternalCacheDirs().

Tipp: Um den Dateibereich zu erhalten und die Leistung Ihrer App zu erhalten, ist es Es ist wichtig, dass Sie Ihre Cache-Dateien sorgfältig verwalten und diese entfernen Dies wird im gesamten Lebenszyklus Ihrer App nicht mehr benötigt.

87
mibollma

Für temporäre interne Dateien gibt es zwei Optionen

1.

File file; 
file = File.createTempFile(filename, null, this.getCacheDir());

2.

File file
file = new File(this.getCacheDir(), filename);

Beide Optionen fügen Dateien zum Cache-Verzeichnis der Anwendung hinzu und können daher gelöscht werden, um Speicherplatz nach Bedarf zu schaffen. Option 1 fügt jedoch eine Zufallszahl am Ende des Dateinamens hinzu, um die Dateien eindeutig zu halten. Außerdem wird eine Dateierweiterung hinzugefügt, die standardmäßig .tmp ist. Sie kann jedoch über den 2. Parameter auf einen beliebigen Wert gesetzt werden. Die Verwendung der Zufallszahl bedeutet, dass trotz der Angabe eines Dateinamens die Nummer nicht zusammen mit der Suffix-/Dateierweiterung (standardmäßig .tmp) hinzugefügt wird. Beispielsweise geben Sie Ihren Dateinamen als internal_file an und werden als internal_file1456345.tmp ausgegeben. Während Sie die Erweiterung angeben können, können Sie die hinzugefügte Nummer nicht angeben. Sie können den über file.getName(); generierten Dateinamen jedoch finden, müssen Sie ihn jedoch irgendwo speichern, um ihn jederzeit verwenden zu können, um beispielsweise die Datei zu löschen oder zu lesen. Aus diesem Grund bevorzuge ich die zweite Option, da der von Ihnen angegebene Dateiname der erstellte Dateiname ist.

31
AdrenalineJunky

Sie können das Cache-Verzeichnis mithilfe von context.getCacheDir () verwenden.

File temp=File.createTempFile("prefix","suffix",context.getCacheDir());
12
Macarse

Sie können die File.deleteOnExit()-Methode verwenden

https://developer.Android.com/reference/Java/io/File.html#deleteOnExit ()

Es wird hier verwiesen https://developer.Android.com/reference/Java/io/File.html#createTempFile(Java.lang.String , Java.lang.String, Java.io.File)

0
kotucz

Mach es einfach. Laut Dokumentation https://developer.Android.com/training/data-storage/files

String imageName = "IMG_" + String.valueOf(System.currentTimeMillis()) +".jpg";
        picFile = new File(ProfileActivity.this.getCacheDir(),imageName);

und löschen Sie es nach dem Gebrauch

picFile.delete()
0
Shivam Dawar