我尝试删除目录中的文件而没有文件路径在我的数组中
public static boolean deleteDir(File dir, List<String> exclusionList) throws IOException {
if (exclusionList != null && exclusionList.contains(dir.getCanonicalPath())) { // skip file
System.out.println("Skipped: " + dir.getCanonicalPath());
return true;
}
System.out.println("Deleting: " + dir.getCanonicalPath());
if (dir.isDirectory()) {
File[] children = dir.listFiles();
boolean success = true;
for (File element : children) {
if (!deleteDir(element, exclusionList)) {
success = false;
}
}
return success;
}
return dir.delete();
}
这是我删除的功能,并且可以正常删除.txt .yml等文件,但是当它必须删除文件夹(文件夹内容删除perflecty)但文件夹存在时,我有很多空文件夹; / < / p>
答案 0 :(得分:1)
问题是由目录的处理方式引起的:
System.out.println("Deleting: " + dir.getCanonicalPath());
if (dir.isDirectory()) {
File[] children = dir.listFiles();
boolean success = true;
for (File element : children) {
if (!deleteDir(element, exclusionList)) {
success = false;
}
}
return success; // <= for directories the method returns here
}
return dir.delete();
在目录中,该方法将以递归方式为所有子元素调用deleteDir
,并检查是否所有子元素都已成功删除。之后,该方法只返回,而不删除目录本身。一个简单的解决方法是仅在某个子元素的删除失败时终止:
System.out.println("Deleting: " + dir.getCanonicalPath());
if (dir.isDirectory()) {
File[] children = dir.listFiles();
boolean success = true;
for (File element : children) {
if (!deleteDir(element, exclusionList)) {
success = false;
}
}
// return only if some child couldn't be deleted.
if(!success)
return false;
}
// delete the directory itself (or the file, if a file is passed as parameter)
return dir.delete();
答案 1 :(得分:0)
如果我正确理解了您的问题,那么删除文件后会有许多空文件夹,例如.txt
,您希望它们消失了吗?
这是一个想法:
从删除子项(element
)返回后,检查该目录中的目录和文件数是否为零,然后应用:
FileUtils.deleteDirectory(directory)
if (element is a directory and is empty) {
FileUtils.deleteDirectory(element);
}
这应该是你想要的。继续编写if语句中的逻辑,它应该删除for
循环中的每个空目录。
注意FileUtils
是http://commons.apache.org/proper/commons-io/