Android'de geçici bir dosya oluşturmanın en iyi yolu nedir?
Can File.createTempFile kullanılacak? Belgeler bu konuda çok belirsiz.
Özellikle, ile oluşturulan geçici dosyaların, ne zaman File.createTempFile
silindiği açık değildir .
Android'de geçici bir dosya oluşturmanın en iyi yolu nedir?
Can File.createTempFile kullanılacak? Belgeler bu konuda çok belirsiz.
Özellikle, ile oluşturulan geçici dosyaların, ne zaman File.createTempFile
silindiği açık değildir .
Yanıtlar:
Ben tipik olarak budur:
File outputDir = context.getCacheDir(); // context being the Activity pointer
File outputFile = File.createTempFile("prefix", "extension", outputDir);
Onların silinmesine gelince, ben de tam değilim. Bunu bir önbellek uygulamamda kullandığımdan, önbellek dizini boyutu önceden ayarlanmış değerime gelene kadar en eski dosyaları el ile silerim.
Dahili ve harici geçici dosyalar için en iyi uygulamalar :
Bazı verileri kalıcı olarak saklamak yerine önbelleğe almak isterseniz
getCacheDir()
, uygulamanızın geçici önbellek dosyalarını kaydetmesi gereken dahili dizini temsil eden bir Dosya açmak için kullanmalısınız .Cihazın dahili depolama alanı azaldığında, Android alan kazanmak için bu önbellek dosyalarını silebilir. Ancak, bu dosyaları sizin için temizlemek için sisteme güvenmemelisiniz. Önbellek dosyalarını her zaman kendiniz tutmalı ve 1MB gibi tüketilen makul bir alan dahilinde kalmalısınız. Kullanıcı uygulamanızı kaldırdığında, bu dosyalar kaldırılır.
Önbellek dosyalarını kaydetmeniz gereken harici depolama dizinini temsil eden bir Dosya açmak için arayın
getExternalCacheDir()
. Kullanıcı uygulamanızı kaldırırsa, bu dosyalar otomatik olarak silinir.Benzer
ContextCompat.getExternalFilesDirs()
Yukarıda bahsedildiği, ayrıca arayarak (varsa) ikincil harici depolama önbellek dizinine erişebilirsinizContextCompat.getExternalCacheDirs()
.İpucu: Dosya alanını korumak ve uygulamanızın performansını korumak için, önbellek dosyalarınızı dikkatli bir şekilde yönetmeniz ve uygulamanızın yaşam döngüsü boyunca artık gerekmeyen dosyaları kaldırmanız önemlidir.
Geçici dahili dosyalar için bunların 2 seçeneği vardır
1.
File file;
file = File.createTempFile(filename, null, this.getCacheDir());
2.
File file
file = new File(this.getCacheDir(), filename);
Her iki seçenek de uygulamalar önbellek dizinine dosya ekler ve bu nedenle gerektiğinde yer açmak için temizlenebilir, ancak 1. seçenek dosyaları benzersiz tutmak için dosya adının sonuna rastgele bir sayı ekler. Ayrıca .tmp
varsayılan olarak bir dosya uzantısı ekler , ancak 2. parametrenin kullanılmasıyla herhangi bir şeye ayarlanabilir. Rastgele sayının kullanılması, bir dosya adı belirtilmesine rağmen, sonek / dosya uzantısıyla birlikte .tmp
varsayılan olarak eklenen numarayla aynı kalmayacağı anlamına gelir ( varsayılan olarak), örneğin dosya adınızı olarak belirtir internal_file
ve olarak çıkar internal_file1456345.tmp
. Bununla birlikte, uzantıyı belirtebilirsiniz, eklenen numarayı belirtemezsiniz. Ancak oluşturduğu dosya adını bulabilirsiniz.file.getName();
, ancak bir yerde saklamanız gerekir; böylece dosyayı silmek veya okumak istediğinizde kullanabilirsiniz. Bu nedenle, belirttiğiniz dosya adı oluşturulan dosya adı olduğundan 2. seçeneği tercih ederim.
Context.getCacheDir () öğesini kullanarak önbellek dizinini kullanabilirsiniz .
File temp=File.createTempFile("prefix","suffix",context.getCacheDir());
File.deleteOnExit()
Yöntemi kullanabilirsiniz
https://developer.android.com/reference/java/io/File.html#deleteOnExit ()
Burada https://developer.android.com/reference/java/io/File.html#createTempFile(java.lang.String , java.lang.String, java.io.File)
Basit bir şekilde yapın. Belgelere göre https://developer.android.com/training/data-storage/files
String imageName = "IMG_" + String.valueOf(System.currentTimeMillis()) +".jpg";
picFile = new File(ProfileActivity.this.getCacheDir(),imageName);
ve kullandıktan sonra silin
picFile.delete()