Dans mon application, j'ai ajouté la possibilité d'ajouter et d'enregistrer des images pour la journée, représentées par un Fragment
.
Afin de sauvegarder l'image sur la carte SD, j'utilise actuellement la fonction File.createTempFile
:
File imageFile = File.createTempFile(imageFileName, MyApplication.JPEG_FILE_SUFFIX, MyApplication.getAlbumDir());
En fait, j'ai également essayé avec la méthode standard:
File imageFile = new File(MyApplication.getAlbumDir(), imageFileName + MyApplication.JPEG_FILE_SUFFIX);
Les deux fonctionnent, mais dans mon cas, le premier est meilleur que le second car la fonction createTempFile
ajoute un long nombre aléatoire à la fin du nom de fichier, ce qui le rend unique.
Pour vous donner un exemple, voici ce que j'obtiens avec les deux méthodes:
Avec createTempFile: IMG_2013-06-18_-1961144729.jpg
Avec nouveau fichier: IMG_2013-06-18_.jpg
Enfin ma question est, est-il sûr de continuer à utiliser createTempFile
pour enregistrer mes photos ou dois-je utiliser la méthode standard et ajouter du code pour générer un nom de fichier unique? Doit-il être utilisé uniquement pour les fichiers temporaires?
J'ai examiné la documentation sur la fonction mais je n'ai rien trouvé sur les conséquences possibles de son utilisation au lieu de new File
.
Merci
On dirait que votre application crée des fichiers, vous devez donc garantir des noms de fichiers uniques. Vous pouvez conserver une sorte de compteur dans votre application (enregistré dans les préférences ou la base de données) et l'utiliser. Ensuite, vous pouvez créer des noms plus courts/plus contrôlés et contrôler vous-même l'unicité. Ou vous pouvez utiliser createTempFile (), ce qui vous garantira un nom de fichier unique (mais vous n'obtiendrez qu'un contrôle partiel du nom de fichier). On dirait que vous préférez createTempFile (), il n'y a donc aucune raison de ne pas continuer à l'utiliser si vous êtes satisfait des noms de fichiers qu'il génère. Il n'y a pas d'autre inconvénient que de ne pas avoir un contrôle total sur le format du nom de fichier.
Pour les fichiers internes temporaires, il existe 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 ajoutera un nombre aléatoire à la fin du nom de fichier pour garder les fichiers uniques. Il ajoutera également une extension de fichier qui est .tmp par défaut mais il peut être réglé sur n'importe quoi via l'utilisation du 2ème paramètre. L'utilisation du nombre aléatoire signifie qu'en dépit de la spécification d'un nom de fichier, il ne reste pas le même que le numéro est ajouté avec l'extension/suffixe de fichier (.tmp par défaut). . Alors que vous pouvez spécifier l'extension, vous ne pouvez pas spécifier le numéro qui est ajouté. Vous pouvez cependant trouver le nom de fichier qu'il génère via file.getName (); mais vous devrez le stocker quelque part afin de pouvoir l'utiliser quand vous le souhaitez, par 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éé.
1. Créer un fichier avec un nom aléatoire
File file = File.createTempFile(String prefix, String suffix, File parent)
2. Créer un fichier avec le nom exact
File file = new File(File parent, String child);
file.createNewFile();
Créez réellement le fichier sur le disque et retourne vrai si le fichier est créé avec succès
Le nom du fichier passera exactement au paramètre enfant
3. Créer uniquement un objet fichier (en mémoire)
File file = new File(File parent, String child);
// doesn't create the file on disk until calling createNewFile() method
parent
Le paramètre peut être l'un de ceux-ci:
Répertoires privés d'applications
Annuaires publics