lola
Después de enumerar un directorio, ahora necesito eliminar todos los archivos.
Solía:
final File[] files = outputFolder.listFiles();
files.delete();
Pero esto no ha eliminado el directorio.
Código N
Tienes que hacer esto para cada archivo:
public static void deleteFolder(File folder) {
File[] files = folder.listFiles();
if(files!=null) { //some JVMs return null for empty dirs
for(File f: files) {
if(f.isDirectory()) {
deleteFolder(f);
} else {
f.delete();
}
}
}
folder.delete();
}
Luego llame
deleteFolder(outputFolder);
-
+1. Sin embargo, la última línea debe ser
outputFolder.delete()
en vez deoutput.delete()
.– cuchara-tenedor
14 de octubre de 2011 a las 13:16
-
Lo intenté, pero cuando abro el navegador, la carpeta todavía está aquí y contiene todos los archivos…
– lola
14 de octubre de 2011 a las 13:18
-
No funcionará si uno de los archivos no es un directorio vacío. Debe eliminar los contenidos del directorio de forma recursiva. if(f.isDirectory())myDelete(f)
– josefx
14/10/2011 a las 13:20
-
Tienes razón, cambié el código.
– Código N
14/10/2011 a las 13:37
-
Obtuve nullPointerExcpetion en for (Archivo f: archivos) {
– lola
14/10/2011 a las 13:44
Dhruv
Para eliminar carpetas que contienen archivos, no es necesario realizar bucles ni realizar búsquedas recursivas. Puedes usar directamente:
FileUtils.deleteDirectory(<File object of directory>);
Esta función eliminará del directorio la carpeta y todos los archivos que contiene.
-
supongo que te refieres al método commons-io: org.apache.commons.io.FileUtils.deleteDirectory(File)
– cproinger
11 de septiembre de 2012 a las 9:34
-
¡Casi ahí! La pregunta era cómo eliminar el contenido de la carpeta (no el filtro en sí); commons-io también tiene un método para eso: FileUtils.cleanDirectory(File);
– Daniel
23 de marzo de 2013 a las 22:09
-
¿Hay una forma similar de eliminar solo los archivos dentro de la carpeta y no la carpeta en sí?
– Lucía
3 de noviembre de 2014 a las 6:27
-
@Lucy revisa el comentario anterior. Puede usar el método FileUtils.cleanDirectory(File) como ha mencionado Daniel
– vnkid
9 de noviembre de 2018 a las 8:21
Todos los archivos deben eliminarse del directorio antes de que se elimine.
Hay bibliotecas de terceros que tienen muchas utilidades comunes, incluidas algunas que lo hacen por usted:
-
Desafortunadamente,
Files.deleteRecursively()
se eliminó de Guava en la versión 11.0.– Jonik
13 de enero de 2014 a las 10:11
-
FileUtils.forceDelete() pertenece a commons-io.
– niaomingjian
19 de julio de 2018 a las 9:36
¡No puedes eliminar en una matriz! Esto debería funcionar mejor:
for (File f : files) f.delete();
Pero no funcionará si las carpetas no están vacías. Para estos casos, deberá descender recursivamente a la jerarquía de carpetas y eliminar todo. Sí, es una pena que Java no pueda hacer eso por defecto…
usuario2546090
Aquí hay una posible solución para resolver el problema sin una biblioteca:
public static boolean delete(File file) {
File[] flist = null;
if(file == null){
return false;
}
if (file.isFile()) {
return file.delete();
}
if (!file.isDirectory()) {
return false;
}
flist = file.listFiles();
if (flist != null && flist.length > 0) {
for (File f : flist) {
if (!delete(f)) {
return false;
}
}
}
return file.delete();
}
-
Este bloque de código: “if (!delete(f)) { return false; }” podría reemplazarse por “return delete(f);” ¿no podría?
– Eliezer Mirón
5 ene a las 22:50
sombra de fuego52
No puedes eliminar un File
formación. Como sugieren todas las otras respuestas, debe eliminar cada archivo individual antes de eliminar la carpeta …
final File[] files = outputFolder.listFiles();
for (File f: files) f.delete();
outputFolder.delete();
-
Este bloque de código: “if (!delete(f)) { return false; }” podría reemplazarse por “return delete(f);” ¿no podría?
– Eliezer Mirón
5 ene a las 22:50
Dellanio
Utilice FileUtils con FileUtils.deleteDirectory();
-
Mejor menciona eso
FileUtils
es parte de Apache Commons IO.– isaac
15/10/2013 a las 21:58
¿Incluso compila? estás llamando a eliminar en la matriz.
– Alpedar
14/10/2011 a las 13:11