2009-09-15 12 views

Respuesta

4

Supresión se intentará sólo para la terminación normal de la máquina virtual, como se define por la especificación del lenguaje Java

Nº comprobar el archivo en la próxima puesta en marcha si es posible.

4

Como señala Tim Bender, File.deleteOnExit() no garantiza que el archivo realmente se elimine.

En los sistemas Unixish (como Linux u OSX), sin embargo, es posible eliminar el archivo temporal antes de escribirlo (pero después de abrirlo). Siempre que mantenga un descriptor abierto en el archivo, puede seguir leyéndolo y escribiéndolo bien, aunque el archivo ya no exista en el árbol de directorios, y el sistema operativo recuperará automáticamente el espacio utilizado por el archivo cuando su el programa sale (o cierra el último descriptor del archivo).

Esto no funcionará en Windows, que tiene una semántica de sistema de archivos diferente y no permite la eliminación de archivos abiertos. Sin embargo, en código portable, sólo tiene que intentar eliminar el archivo después de abrirlo y, en caso de que no tiene éxito, caer de nuevo 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(); 

Tenga en cuenta que, al parecer, File.deleteOnExit() no es muy fiable en Windows. Por lo tanto, siempre que sea posible, debe intentar cerrar manualmente y eliminar sus archivos temporales cuando haya terminado con ellos. Para más detalles, vea this answer I wrote to another question.

+0

esto es brillante – alex

Cuestiones relacionadas