Apa cara terbaik untuk membuat file sementara di Android?
Bisakah File.createTempFile digunakan? Dokumentasinya sangat kabur tentang itu.
Secara khusus, tidak jelas kapan file sementara yang dibuat dengan File.createTempFile
dihapus, jika pernah.
Apa cara terbaik untuk membuat file sementara di Android?
Bisakah File.createTempFile digunakan? Dokumentasinya sangat kabur tentang itu.
Secara khusus, tidak jelas kapan file sementara yang dibuat dengan File.createTempFile
dihapus, jika pernah.
Jawaban:
Inilah yang biasanya saya lakukan:
File outputDir = context.getCacheDir(); // context being the Activity pointer
File outputFile = File.createTempFile("prefix", "extension", outputDir);
Adapun penghapusan mereka, saya juga tidak yakin. Karena saya menggunakan ini dalam implementasi cache, saya secara manual menghapus file tertua sampai ukuran direktori cache turun ke nilai preset saya.
Praktik terbaik pada file sementara internal dan eksternal :
Jika Anda ingin men-cache beberapa data, daripada menyimpannya secara terus-menerus, Anda harus menggunakannya
getCacheDir()
untuk membuka File yang mewakili direktori internal tempat aplikasi Anda harus menyimpan file cache sementara.Ketika perangkat kekurangan ruang penyimpanan internal, Android dapat menghapus file cache ini untuk memulihkan ruang. Namun, Anda tidak harus bergantung pada sistem untuk membersihkan file-file ini untuk Anda. Anda harus selalu menjaga file cache sendiri dan tetap dalam batas ruang yang dikonsumsi, seperti 1MB. Saat pengguna mencopot pemasangan aplikasi Anda, file-file ini dihapus.
Untuk membuka File yang mewakili direktori penyimpanan eksternal tempat Anda menyimpan file cache, panggil
getExternalCacheDir()
. Jika pengguna mencopot pemasangan aplikasi Anda, file-file ini akan dihapus secara otomatis.Mirip dengan
ContextCompat.getExternalFilesDirs()
, yang disebutkan di atas, Anda juga dapat mengakses direktori cache pada penyimpanan eksternal sekunder (jika tersedia) dengan meneleponContextCompat.getExternalCacheDirs()
.Kiat: Untuk menjaga ruang file dan mempertahankan kinerja aplikasi Anda, penting bagi Anda untuk mengelola file cache dengan hati-hati dan menghapus yang tidak diperlukan lagi sepanjang siklus hidup aplikasi Anda.
Untuk file internal sementara, ada 2 opsi
1.
File file;
file = File.createTempFile(filename, null, this.getCacheDir());
2.
File file
file = new File(this.getCacheDir(), filename);
Kedua opsi menambahkan file dalam direktori cache aplikasi dan dengan demikian dapat dihapus untuk membuat ruang seperti yang diperlukan tetapi opsi 1 akan menambahkan nomor acak di akhir nama file untuk menjaga file unik. Itu juga akan menambahkan ekstensi file yang secara .tmp
default, tetapi dapat diatur untuk apa pun melalui penggunaan parameter ke-2. Penggunaan bilangan acak berarti meskipun menentukan nama file itu tidak tetap sama dengan nomor ditambahkan bersama dengan akhiran / ekstensi file ( .tmp
secara default) misalnya Anda menentukan nama file Anda internal_file
dan keluar sebagai internal_file1456345.tmp
. Sedangkan Anda dapat menentukan ekstensi, Anda tidak dapat menentukan nomor yang ditambahkan. Namun Anda dapat menemukan nama file yang dihasilkannyafile.getName();
, tetapi Anda harus menyimpannya di suatu tempat sehingga Anda dapat menggunakannya kapan pun Anda ingin misalnya menghapus atau membaca file. Karenanya untuk alasan ini saya lebih suka opsi ke-2 karena nama file yang Anda tentukan adalah nama file yang dibuat.
Anda dapat menggunakan direktori cache menggunakan context.getCacheDir () .
File temp=File.createTempFile("prefix","suffix",context.getCacheDir());
Anda dapat menggunakan File.deleteOnExit()
metode ini
https://developer.android.com/reference/java/io/File.html#deleteOnExit ()
Ini dirujuk di sini https://developer.android.com/reference/java/io/File.html#createTempFile(java.lang.String , java.lang.String, java.io.File)
Lakukan dengan sederhana. Menurut dokumentasi https://developer.android.com/training/data-storage/files
String imageName = "IMG_" + String.valueOf(System.currentTimeMillis()) +".jpg";
picFile = new File(ProfileActivity.this.getCacheDir(),imageName);
dan hapus setelah digunakan
picFile.delete()