web-dev-qa-db-fra.com

Création de fichiers temporaires sous Android

Quel est le meilleur moyen de créer un fichier temporaire sous Android? 

Peut-on utiliser File.createTempFile ? La documentation est très vague à ce sujet.

En particulier, on ne sait pas quand les fichiers temporaires créés avec File.createTempFile sont supprimés, si jamais.

182
hpique

C'est ce que je fais généralement:

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

Quant à leur suppression, je ne suis pas tout à fait sûr non plus. Comme je l'utilise dans la mise en œuvre d'un cache, je supprime manuellement les fichiers les plus anciens jusqu'à ce que la taille du répertoire de cache atteigne ma valeur prédéfinie.

252
sparkymat

Meilleures pratiques pour les fichiers internes et externes temporaires:

Cache interne

Si vous souhaitez mettre certaines données en mémoire cache plutôt que de les stocker de manière persistante, vous devez utiliser getCacheDir() pour ouvrir un fichier qui représente le fichier répertoire interne où votre application doit enregistrer le cache temporaire des dossiers.

Si le périphérique manque d'espace de stockage interne, Android peut supprimer ces fichiers de cache pour récupérer de l'espace. Cependant, vous ne devriez pas compter sur le système pour nettoyer ces fichiers pour vous. Vous devriez toujours maintenir le cache se file et reste dans une limite d'espace raisonnable consommés, tels que 1MB. Lorsque l'utilisateur désinstalle votre application, ces fichiers sont supprimés.

Cache externe

Pour ouvrir un fichier qui représente le répertoire de stockage externe où vous devriez enregistrer les fichiers de cache, appelez getExternalCacheDir(). Si l'utilisateur désinstalle votre application, ces fichiers seront automatiquement supprimé.

Similaire à ContextCompat.getExternalFilesDirs(), mentionné ci-dessus, vous pouvez également accéder à un répertoire de cache sur un stockage externe secondaire (si disponible) en appelant ContextCompat.getExternalCacheDirs().

Conseil: Pour. Préserver l'espace disque et maintenir les performances de votre application, utilisez Il est important de gérer soigneusement vos fichiers de cache et de les supprimer qui ne sont plus nécessaires tout au long du cycle de vie de votre application.

87
mibollma

Pour les fichiers internes temporaires, il y a 2 options

1.

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

2.

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

Les deux options ajoutent des fichiers dans le répertoire de cache des applications et peuvent donc être effacées pour libérer de l'espace, mais l'option 1 ajoute un nombre aléatoire à la fin du nom du fichier pour que les fichiers restent uniques. Il ajoutera également une extension de fichier qui est .tmp par défaut, mais vous pouvez définir n'importe quoi via l'utilisation du second paramètre. L'utilisation du nombre aléatoire signifie que, malgré la spécification d'un nom de fichier, il ne reste pas identique car le nombre est ajouté avec l'extension de suffixe/fichier (.tmp par défaut). Par exemple, vous spécifiez votre nom de fichier comme étant internal_file et vous sortez comme étant internal_file1456345.tmp. Alors que vous pouvez spécifier l’extension, vous ne pouvez pas spécifier le numéro ajouté. Vous pouvez toutefois trouver le nom du fichier qu'il génère via file.getName();, mais vous devrez le stocker quelque part pour pouvoir l'utiliser à tout moment, par exemple pour supprimer ou lire le fichier. Par conséquent, pour cette raison, je préfère la deuxième option car le nom de fichier que vous spécifiez est le nom de fichier créé.

31
AdrenalineJunky

Vous pouvez utiliser le répertoire de cache en utilisant context.getCacheDir () .

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

Vous pouvez utiliser la méthode File.deleteOnExit()

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

Il est référencé ici https://developer.Android.com/reference/Java/io/File.html#createTempFile(Java.lang.String , Java.lang.String, Java.io.File)

0
kotucz

Faites-le simplement. Selon la documentation https://developer.Android.com/training/data-storage/files

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

et supprimez-le après utilisation

picFile.delete()
0
Shivam Dawar