S'assurer que le fichier est supprimé à la sortie de la machine virtuelle Java

StackOverflow https://stackoverflow.com/questions/1424736

  •  07-07-2019
  •  | 
  •  

Question

File.deleteOnExit () garantit-il que le fichier est supprimé même si la machine virtuelle Java est tuée prématurément?

Était-ce utile?

La solution

  

La suppression ne sera tentée que pour la terminaison normale de la machine virtuelle, telle que définie par la spécification du langage Java

.

Non. vérifiez le fichier au prochain démarrage si possible.

Autres conseils

Comme le note Tim Bender, File.deleteOnExit () ne garantit pas que le fichier sera effectivement supprimé.

Sur les systèmes Unix (tels que Linux ou OSX), cependant, il est possible de supprimer le fichier temporaire avant de l'écrire (mais après l'avoir ouvert). Tant que vous conservez un descripteur ouvert dans le fichier, vous pouvez continuer à lire et à écrire, même si le fichier n’existe plus dans l’arborescence de répertoires, et le système d’exploitation récupérera automatiquement l’espace utilisé par le fichier lors de la sauvegarde. programme quitte (ou ferme le dernier descripteur du fichier).

Cela ne fonctionnera pas sous Windows, qui a une sémantique de système de fichiers différente et ne permet pas de supprimer les fichiers ouverts. Cependant, dans le code portable, vous pouvez simplement essayer de supprimer le fichier après l'avoir ouvert et, si cela ne fonctionne pas, vous repliez sur deleteOnExit () :

File tempFile = File.createTempFile("tempfile", ".tmp");
RandomAccessFile fh = new RandomAccessFile (tempFile, "rw");

// try to delete the file now, fall back to deletion on exit
if ( !tempFile.delete() ) tempFile.deleteOnExit();

Notez que, apparemment, File.deleteOnExit () n’est pas très fiable sous Windows. Ainsi, chaque fois que cela est possible, vous devriez toujours essayer de fermer et de supprimer manuellement vos fichiers temporaires lorsque vous avez terminé. Pour plus de détails, consultez cette réponse que j'ai posée à une autre question . .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top