¿File.deleteOnExit() garantiza que el archivo se elimine incluso si la JVM se elimina prematuramente?Asegurarse de que el archivo se elimine en JVM exit
Respuesta
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.
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.
- 1. Esperando que el sistema elimine el archivo
- 2. cómo asegurarse de que ninguna JVM y optimización del compilador se produce
- 3. ¿Cómo asegurarse de que el evento AppDomain.CurrentDomain.AssemblyResolve siempre se active?
- 4. Cómo asegurarse de que se envíe un SMS en Android
- 5. evitando que se elimine el símbolo no utilizado
- 6. ¿Es OpenJDK JVM lo mismo que Oracle Java SE JVM?
- 7. awk: catch `exit 'en el bloque END
- 8. Vim, elimine automáticamente el archivo de intercambio cuando se guarde el archivo
- 9. ¿Cómo asegurarse de que Tomcat6 lea CATALINA_OPTS en Windows?
- 10. cómo asegurarse de que un archivo se cerrará al final de la ejecución
- 11. ¿Cómo hacer que un MovieClip se elimine solo en AS3?
- 12. ¿Es posible que un archivo PHP se elimine en la ejecución?
- 13. vez desde que se inició JVM
- 14. C# exit generic ForCada que utiliza lambda
- 15. ¿Debo cerrar() un SQLConnection antes de que se elimine?
- 16. ¿Hay alguna forma de que no se elimine el popover cuando se presiona fuera de él?
- 17. ¿Qué puede hacer que node.js imprima y se elimine?
- 18. Impedir que un usuario elimine, mueva o cambie el nombre de un archivo
- 19. ¿Cómo hacer que el archivo .BAT lo elimine después de la finalización?
- 20. El archivo vacío es un archivo fuente Java válido. ¿Cómo se maneja dentro de la JVM?
- 21. ¿Cómo asegurarse de que un número flota en Erlang?
- 22. exit(); morir(); falso retorno;
- 23. ¿Cómo evito que IIS7 elimine mis cookies?
- 24. ¿Cómo asegurarse de que los programas de ES3 se ejecuten en un motor ES5?
- 25. Evitar que Paperclip elimine/sobrescriba archivos adjuntos en la actualización
- 26. Xcode 4.5 Storyboard 'Exit'
- 27. Impedir que IIS elimine una tarea antes de que finalice
- 28. ¿Cómo se diferencian las "JVM modernas" de las JVM antiguas?
- 29. ¿Cómo impido que el filtro de gradiente de Internet Explorer elimine el contenido que debería desbordarse?
- 30. ¿Cómo uso el comando linux flock para evitar que otro proceso raíz elimine un archivo?
esto es brillante – alex