枚举目录后,我现在需要删除所有文件。
我用了:
final File[] files = outputFolder.listFiles();
files.delete();
但这并没有删除目录。
枚举目录后,我现在需要删除所有文件。
我用了:
final File[] files = outputFolder.listFiles();
files.delete();
但这并没有删除目录。
您必须为每个文件执行此操作:
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);
要删除包含文件的文件夹,无需循环或递归搜索。您可以直接使用:
FileUtils.deleteDirectory(<File object of directory>);
此功能将目录删除文件夹及其中的所有文件。
在删除之前,必须从目录中删除所有文件。
有很多第三方库有很多常用的实用程序,包括那些为你做的:
您不能在数组上删除!这应该会更好:
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() 一起使用;
for(File f : files) {
f.delete();
}
files.delete(); // will work