94

枚举目录后,我现在需要删除所有文件。

我用了:

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

但这并没有删除目录。

4

8 回答 8

133

您必须为每个文件执行此操作:

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);
于 2011-10-14T13:10:30.763 回答
106

要删除包含文件的文件夹,无需循环或递归搜索。您可以直接使用:

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

此功能将目录删除文件夹及其中的所有文件。

于 2011-12-26T04:24:08.730 回答
11

在删除之前,必须从目录中删除所有文件。

有很多第三方库有很多常用的实用程序,包括那些为你做的:

于 2011-10-14T13:12:26.120 回答
8

您不能在数组上删除!这应该会更好:

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

但如果文件夹不为空,它将不起作用。对于这种情况,您需要递归地进入文件夹层次结构并删除所有内容。是的,很遗憾Java默认不能做到这一点......

于 2011-10-14T13:12:15.360 回答
5

这是在没有库的情况下解决问题的一种可能解决方案:

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();
}
于 2013-07-03T10:25:26.773 回答
4

您不能删除File数组。正如所有其他答案所暗示的那样,您必须在删除文件夹之前删除每个单独的文件......

final File[] files = outputFolder.listFiles();
for (File f: files) f.delete();
outputFolder.delete();
于 2011-10-14T13:16:46.807 回答
2

将 FileUtils 与 FileUtils.deleteDirectory() 一起使用;

于 2013-01-31T14:42:16.727 回答
0
for(File f : files) {
    f.delete();
}    
files.delete(); // will work
于 2011-10-14T13:13:42.223 回答