Hola, estoy usando una gran cantidad de archivos temporales en Java y mi problema es que no se eliminan.¿Cómo usar la recolección de basura para eliminar archivos?
Sin tener que implementar mi propio manejo de la gestión temporal de archivos (no es difícil, te lo concedo pero soy flojo y tengo tantas cosas que hacer si puedo ahorrar reinventar la rueda todo esto mejor) ¿hay alguna manera de asegúrese de que los archivos temporales en el disco se eliminarán de una manera bastante regular.
1 - usando File tmp = File.createTempFile(), seguro que puedo decir tmp.deleteOnExit() pero si la cosa se ejecuta en un servicio, la única forma en que se cierra es cuando se bloquea (ocurre con poca frecuencia) o cuando el sistema falla (como cuando la unidad está completamente llena de archivos temporales y derriba el clúster ... ¡Uy!)
Idealmente, las instancias creadas se recopilan en algún momento por el recolector de basura, y dado que hay MUCHA el tiempo de inactividad en la aplicación sería simplemente genial si el GC pudiera, bueno, terminar su limpieza y realmente eliminar el archivo en el disco también al eliminar la referencia de la instancia de la memoria.
la única forma que veo ahora es sobrecargar la clase File y agregar un método finalizado ... ¡Si lo hago, también podría hacerlo con mi propio administrador de archivos temporal!
En resumen, ¿puedo usar el Recolector de basura para limpiar los recursos del sistema (es decir, los archivos) también?
Gracias a todos por sus respuestas. Acepté Christoffer porque era lo más simple de implementar y es lo que terminé haciendo.
Supongo que haberme limpiado después de tantos años me ha hecho olvidar la limpieza básica que, sin embargo, tuve que hacer en los buenos días de C++.
Creo que estás confundiendo tus términos. Un recolector de basura es para memoria, no para archivos. –
sin mencionar que si desea que esto se ejecute al salir de la aplicación, deberá colocar algo manual allí, ya que la recolección de basura no se ejecuta en quit/crash (la memoria es desasignada por el SO en ese punto, no el framework) –
Y Java no tiene destructores, por lo que no puede asociar la eliminación con los objetos que se recopilan. – lhahne