Création de fichiers temporaires sur Android

Quelle est la meilleure façon de créer un fichier temporaire sous Android?

Peut "151940920 De Fichier".utiliser createTempFile ? La documentation est très vague à ce sujet.

En particulier, il n'est pas clair quand les fichiers temporaires créés avec File.createTempFile sont supprimés, si jamais.

181
demandé sur hpique 2010-08-06 20:47:58

5 réponses

C'est ce que je fais habituellement:

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. Depuis que je l'utilise dans mon implémentation d'un cache, j'efface manuellement les fichiers les plus anciens jusqu'à ce que la taille du répertoire cache descende à ma valeur prédéfinie.

242
répondu sparkymat 2011-06-26 18:22:00

Meilleures pratiques interne et externe fichiers temporaires:

Cache Interne

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

Lorsque l'appareil est faible sur l'espace de stockage interne, Android peut supprimer ces fichiers de cache pour récupérer de l'espace. Cependant, vous ne devez pas compter sur le système de nettoyer ces fichiers pour vous. Vous devez toujours maintenir le cache s'enregistre vous-même et reste dans une limite raisonnable d'espace consommés, tels que 1 MO. Lorsque l'utilisateur désinstalle votre demande, ces fichiers sont supprimés.

Cache Externe

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

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

astuce: pour préserver l'espace des fichiers et maintenir les performances de votre application, il est il est important que vous gériez soigneusement vos fichiers de cache et que vous les supprimiez. qui ne sont plus nécessaires tout au long du cycle de vie de votre application.

85
répondu mibollma 2015-11-11 16:21:52

Pour temporaire de fichiers internes qui leur sont 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 faire de l'espace selon les besoins, mais l'option 1 ajoutera un nombre aléatoire à la fin du nom du fichier pour garder les fichiers uniques. Il va également ajouter une extension de fichier qui est .tmp par défaut, mais il peut être réglé à n'importe quoi via l'utilisation du 2nd paramètre. L'utilisation du nombre aléatoire signifie que malgré la spécification d'un nom de fichier il ne reste pas le même que le nombre est ajouté avec le suffixe/extension de fichier ( .tmp par défaut) E. g vous spécifiez votre nom de fichier comme internal_file et sort comme internal_file1456345.tmp . Alors que vous pouvez spécifier l'extension vous ne pouvez pas spécifier le nombre qui est ajouté. Vous pouvez cependant trouver le nom de fichier qu'il génère via file.getName(); , mais vous aurez besoin de le stocker quelque part afin que vous puissiez l'utiliser quand vous le souhaitez pour exemple pour supprimer ou lire le fichier. Par conséquent, pour cette raison, je préfère la 2e option car le nom de fichier que vous spécifiez est le nom de fichier qui est créé.

26
répondu AdrenalineJunky 2016-12-31 05:23:06

vous pouvez utiliser le DIR de cache en utilisant le contexte .getCacheDir () .

File temp=File.createTempFile("prefix","suffix",context.getCacheDir());
12
répondu Macarse 2015-11-23 04:22:48
0
répondu kotucz 2017-02-06 12:45:17