Supongamos que tengo un File f
que representa un directorio, entonces f.delete()
solo eliminará el directorio si está vacío. He encontrado un couple de examples en línea que usa File.listFiles()
o File.list()
para obtener todos los archivos en el directorio y luego recorre recursivamente la estructura del directorio y elimina todos los archivos. Sin embargo, dado que es posible crear estructuras de directorios infinitamente recursivas (tanto en Windows como en Linux (con enlaces simbólicos)), es posible que los programas escritos con este estilo nunca terminen.Eliminación de directorios no vacíos en Java
Entonces, ¿hay una mejor manera de escribir un programa así para que no caiga en estos escollos? ¿Necesito hacer un seguimiento de todos los lugares que atravesé y asegurarme de no dar vueltas en círculos o hay una manera más agradable?
Actualización: En respuesta a algunas de las respuestas (¡gracias muchachos!) - Prefiero que el código no siga los enlaces simbólicos y permanezca dentro del directorio que supuestamente se eliminó. ¿Puedo confiar en la implementación de Commons-IO para hacer eso, incluso en el caso de Windows?
Hubiera pensado que ralentizaría un borrado recursivo bastante. ¿No podría hacer un File.getPath(). Equals (File.getCanonicalPath())? –
No estoy seguro de cuántos trillizos de directorios recursivos desea procesar, pero un Map.put() y un Map.contains() por directorio no lo ralentizarán. El código que sugirió solo le dirá que en algún lugar de su camino hay enlaces simbólicos. Pueden estar encima del directorio que desea eliminar. – Bombe
Honestamente: preocuparse por hacer el trabajo primero.Solo si funciona perfectamente y puede medir que es demasiado lento (lo que sea que eso signifique), solo _entonces comienza a preocuparse por el rendimiento. La optimización prematura es tan descerebrada que me duele. Físicamente. – Bombe