¿Cómo eliminar el contenido del directorio en Java? [duplicate]

3 minutos de lectura

avatar de usuario
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.

  • ¿Incluso compila? estás llamando a eliminar en la matriz.

    – Alpedar

    14/10/2011 a las 13:11

avatar de usuario
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 de output.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

avatar de usuario
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…

avatar de usuario
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

avatar de usuario
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

avatar de usuario
Dellanio

Utilice FileUtils con FileUtils.deleteDirectory();

  • Mejor menciona eso FileUtils es parte de Apache Commons IO.

    – isaac

    15/10/2013 a las 21:58

¿Ha sido útil esta solución?