Quiero eliminar todos los archivos dentro del directorio ABC.
Cuando lo probé FileUtils.deleteDirectory(new File("C:/test/ABC/"));
, también elimina la carpeta ABC.
¿Existe una solución de línea única donde puedo eliminar archivos dentro del directorio pero no el directorio?
java
file-io
apache-commons-io
Fahim Parkar
fuente
fuente
rm -rf directory; mkdir directory
era más rápido que usarFileUtils.cleanDirectory
.Respuestas:
Hay este método disponible en el mismo archivo. Esto también eliminará de forma recursiva todas las subcarpetas y archivos debajo de ellas.
Documentos:
org.apache.commons.io.FileUtils.cleanDirectory
fuente
rm -rf directory
era mucho más eficiente que usarFileUtils.cleanDirectory
.¿Quieres decir como?
Esto solo eliminará archivos, no directorios.
fuente
for(File file: dir.listFiles())
probablemente se entiende como ...for (File file : new java.io.File("C:\\DeleteMeFolder").listFiles())
...La respuesta de Peter Lawrey es excelente porque es simple y no depende de nada especial, y es la forma en que debe hacerlo. Si necesita algo que elimine los subdirectorios y sus contenidos también, use la recursividad:
Para ahorrar subdirectorios y sus contenidos (parte de su pregunta), modifique de la siguiente manera:
O, como quería una solución de una línea:
Usar una biblioteca externa para una tarea tan trivial no es una buena idea a menos que necesite esta biblioteca para otra cosa de todos modos, en cuyo caso es preferible usar el código existente. Parece que está utilizando la biblioteca Apache de todos modos, así que use su
FileUtils.cleanDirectory()
método.fuente
Java 8 Stream
Esto elimina solo archivos de ABC (los subdirectorios están intactos):
Esto elimina solo archivos de ABC (y subdirectorios):
^ Esta versión requiere el manejo de la IOException
fuente
O para usar esto en Java 8:
Es una lástima que el manejo de excepciones sea tan voluminoso, de lo contrario sería una frase ...
fuente
fuente
Otra solución Java 8 Stream para eliminar todo el contenido de una carpeta, incluidos los subdirectorios, pero no la carpeta en sí.
Uso:
y el código:
El problema con cada solución de flujo que involucra Files.walk o Files.delete es que estos métodos arrojan IOException, que son difíciles de manejar en los flujos.
Intenté crear una solución lo más concisa posible.
fuente
Para eliminar todos los archivos del directorio, diga "C: \ Ejemplo"
fuente
rm -rf
fue mucho más eficiente queFileUtils.cleanDirectory
.No es una solución única, pero después de una evaluación comparativa exhaustiva, descubrimos que usar
rm -rf
era varias veces más rápido que usarFileUtils.cleanDirectory
.Por supuesto, si tiene un directorio pequeño o simple, no importará, pero en nuestro caso teníamos varios gigabytes y subdirectorios profundamente anidados donde tomaría más de 10 minutos
FileUtils.cleanDirectory
y solo 1 minuto conrm -rf
.Aquí está nuestra implementación aproximada de Java para hacer eso:
Vale la pena intentarlo si se trata de directorios grandes o complejos.
fuente
Si desea eliminar todos los archivos, elimine
declaración funcionará.
fuente
Creo que esto funcionará (basado en la respuesta anterior de NonlinearFruit):
¡Salud!
fuente