如何删除 Java 中的目录内容?

在枚举了一个目录之后,我现在需要删除所有的文件。

我用:

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

但这并没有删除目录。

161145 次浏览

You have to do this for each File:

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

Then call

deleteFolder(outputFolder);

You can't delete on an array ! This should work better :

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

But it won't work if the folders are not empty. For this cases, you will need to recursively descend into the folder hierarchy and delete everything. Yes it's a shame Java can't do that by default...

All files must be delete from the directory before it is deleted.

There are third party libraries that have a lot of common utilities, including ones that does that for you:

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

You can't delete an File array. As all of the other answers suggest, you must delete each individual file before deleting the folder...

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

To delete folder having files, no need of loops or recursive search. You can directly use:

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

This function will directory delete the folder and all files in it.

Use FileUtils with FileUtils.deleteDirectory();

Here is one possible solution to solve the problem without a library :

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