Quiero crear y eliminar un directorio usando Java, pero no funciona.
File index = new File("/home/Work/Indexer1");
if (!index.exists()) {
index.mkdir();
} else {
index.delete();
if (!index.exists()) {
index.mkdir();
}
}
java
file-io
delete-directory
Señor G
fuente
fuente
Respuestas:
Java no puede eliminar carpetas con datos. Debe eliminar todos los archivos antes de eliminar la carpeta.
Usa algo como:
¡Entonces deberías poder eliminar la carpeta usando Sin
index.delete()
probar!fuente
FileUtils.deleteDirectory
como dijo @Francesco Menzani.if (!index.delete()) {...}
. Luego, si el índice es un enlace simbólico, se elimina independientemente de si parece que tiene contenido.entries
es nulo.Solo una frase.
Documentación aquí
fuente
Esto funciona, y aunque parece ineficaz omitir la prueba del directorio, no lo es: la prueba ocurre de inmediato en
listFiles()
.Actualizar, para evitar seguir enlaces simbólicos:
fuente
Prefiero esta solución en java 8:
Desde este sitio: http://www.baeldung.com/java-delete-directory
fuente
Files.walk()
, que se indica explícitamente en los documentos de la API. Sé que si no cierra la secuencia devuelta por,Files.list()
por ejemplo, puede quedarse sin identificadores y el programa se bloqueará. Consulte, por ejemplo, stackoverflow.com/q/36990053/421049 y stackoverflow.com/q/26997240/421049 .En JDK 7, puede usar
Files.walkFileTree()
yFiles.deleteIfExists()
para eliminar un árbol de archivos. (Ejemplo: http://fahdshariff.blogspot.ru/2011/08/java-7-deleting-directory-by-walking.html )En JDK 6, una forma posible es utilizar FileUtils.deleteQuietly de Apache Commons, que eliminará un archivo, un directorio o un directorio con archivos y subdirectorios.
fuente
Usando Apache Commons-IO, sigue una línea:
Esto es (ligeramente) más eficaz que
FileUtils.deleteDirectory
.fuente
Como se mencionó, Java no puede eliminar una carpeta que contiene archivos, así que primero elimine los archivos y luego la carpeta.
Aquí hay un ejemplo simple para hacer esto:
O:
fuente
Mi versión recursiva básica, trabajando con versiones anteriores de JDK:
fuente
listFiles()
devuelve un valor nulo, en lugar de llamarisDirectory()
.Ésta es la mejor solución para
Java 7+
:fuente
Guava 21+ al rescate. Úselo solo si no hay enlaces simbólicos que señalen fuera del directorio para eliminar.
(Esta pregunta está bien indexada por Google, por lo que otras personas que usen Guava podrían estar felices de encontrar esta respuesta, incluso si es redundante con otras respuestas en otros lugares).
fuente
Me gusta más esta solución. No utiliza una biblioteca de terceros, sino que utiliza NIO2 de Java 7.
fuente
Una opción más es utilizar el
org.springframework.util.FileSystemUtils
método relevante de Spring, que eliminará de forma recursiva todo el contenido del directorio.¡Eso hará el trabajo!
fuente
En esto
estas llamando
después
Esto significa que está creando el archivo nuevamente después de eliminar File.delete () devuelve un valor booleano. Por lo tanto, si desea verificarlo,
System.out.println(index.delete());
si lo obtienetrue
, esto significa que el archivo se eliminóde los comentarios que se dan a continuación, la respuesta actualizada es así
fuente
Si tiene subcarpetas, encontrará problemas con las respuestas de Cemron. entonces deberías crear un método que funcione así:
fuente
Puede utilizar FileUtils.deleteDirectory . JAVA no puede eliminar las carpetas no vacías con File.delete () .
fuente
directry no puede simplemente eliminar si tiene los archivos, por lo que es posible que primero deba eliminar los archivos internos y luego el directorio
fuente
Puede realizar llamadas recursivas si existen subdirectorios
fuente
podemos usar la
spring-core
dependencia;fuente
La mayoría de las respuestas (incluso recientes) que hacen referencia a clases de JDK se basan en,
File.delete()
pero esa es una API defectuosa ya que la operación puede fallar silenciosamente.La
java.io.File.delete()
documentación del método dice:Como reemplazo, debe favorecer
Files.delete(Path p)
que arroje unIOException
mensaje de error.El código real podría escribirse como:
fuente
puedes intentar lo siguiente
Si hay subcarpetas dentro de su carpeta, es posible que deba eliminarlas de forma recursiva.
fuente
fuente
Funciona de maravilla . Tanto para carpetas como para archivos. Salam :)
fuente
Eliminarlo de otra parte
fuente
Algunas de estas respuestas parecen innecesariamente largas:
También funciona para subdirectorios.
fuente
Puedes usar esta función
fuente