【发布时间】:2011-12-07 18:12:50
【问题描述】:
枚举目录后,我现在需要删除所有文件。
我用过:
final File[] files = outputFolder.listFiles();
files.delete();
但这并没有删除目录。
【问题讨论】:
-
它甚至可以编译吗?你在数组上调用 delete。
标签: java file-io delete-directory
枚举目录后,我现在需要删除所有文件。
我用过:
final File[] files = outputFolder.listFiles();
files.delete();
但这并没有删除目录。
【问题讨论】:
标签: java file-io delete-directory
您必须为每个文件执行此操作:
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);
【讨论】:
outputFolder.delete() 而不是 output.delete()。
删除包含文件的文件夹,无需循环或递归搜索。可以直接使用:
FileUtils.deleteDirectory(<File object of directory>);
此功能将目录删除文件夹及其中的所有文件。
【讨论】:
在删除之前必须从目录中删除所有文件。
有些第三方库有很多常用的实用程序,包括那些为您做这些的:
【讨论】:
Files.deleteRecursively() was removed from Guava 在 11.0 版中。
你不能删除数组!这应该会更好:
for (File f : files) f.delete();
但如果文件夹不为空,它将不起作用。对于这种情况,您需要递归地进入文件夹层次结构并删除所有内容。是的,很遗憾Java默认不能做到这一点......
【讨论】:
这是在没有库的情况下解决问题的一种可能解决方案:
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();
}
【讨论】:
您不能删除 File 数组。正如所有其他答案所暗示的那样,您必须在删除文件夹之前删除每个单独的文件...
final File[] files = outputFolder.listFiles();
for (File f: files) f.delete();
outputFolder.delete();
【讨论】:
将 FileUtils 与 FileUtils.deleteDirectory() 一起使用;
【讨论】:
FileUtils 是 Apache Commons IO 的一部分。
for(File f : files) {
f.delete();
}
files.delete(); // will work
【讨论】: