Как удалить содержимое каталога в Java?

После перечисления каталога мне теперь нужно удалить все файлы.

Я использовал:

final File[] files = outputFolder.listFiles();
files.delete();

Но это не удалило каталог.

Ответ 1

Вы должны сделать это для каждого файла:

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();
}

Затем вызовите

deleteFolder(outputFolder);

Ответ 2

Чтобы удалить папку с файлами, нет необходимости в цикле или рекурсивном поиске. Вы можете напрямую использовать:

FileUtils.deleteDirectory(<File object of directory>);

Эта функция будет удалять папку и все файлы в ней.

Легкий пирог:)

Ответ 3

Все файлы должны быть удалены из каталога до его удаления.

Существуют сторонние библиотеки, в которых есть много общих утилит, включая те, которые делают это для вас:

Ответ 4

Вы не можете удалить массив! Это должно работать лучше:

for (File f : files) f.delete();

Но это не сработает, если папки не пусты. Для этих случаев вам потребуется рекурсивно спуститься в иерархию папок и удалить все. Да, стыдно, что Java по умолчанию не может...

Ответ 5

Вы не можете удалить массив File. Как и все другие ответы, вы должны удалить каждый отдельный файл перед удалением папки...

final File[] files = outputFolder.listFiles();
for (File f: files) f.delete();
outputFolder.delete();

Ответ 6

Вот одно из возможных решений для решения проблемы без библиотеки:

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();
}

Ответ 7

Использовать FileUtils с FileUtils.deleteDirectory();

Ответ 8

for(File f : files) {
    f.delete();
}    
files.delete(); // will work