我有这样的文件夹结构(没有任何文件以进行简单测试(:
d: a b c
现在,我想删除 d: a ,标准/传统方法是使用递归删除sub文件/文件夹,然后再删除父级文件夹:
public static void delete(File file) {
if (file.isFile()) {
file.delete();
} else if (file.isDirectory()) {
File subs[] = file.listFiles();
if (null == subs) {
return;
}
for (File sub : subs) {
delete(sub);
}
if (file.delete()) {
System.out.println("Delete OK: " + file);
} else {
System.out.println("Delete Fail: " + file.getAbsolutePath() + " => " + Arrays.toString(file.listFiles()));
}
}
}
当我在代码以下调用时,没关系:
delete(new File("D:\A"));
但是,当我打开路径 d: a a a a b c in Windows Explorer in Windows Explorer 并尝试运行,这是结果(90%倍,但大约是10%可以(:
Delete OK: D:ABC
Delete Fail: D:AB => children:[D:ABC]
Delete Fail: D:A => children:[D:AB]
当 d: a a b c 被删除时,这很奇怪,但是之后,我仍然会得到 d: a a a b c , d: a b
我可以认为这是一个JRE错误吗?我正在使用Windows 10 64bit,JDK 8。
我也认为file.delete((在Windows许可方面存在一些问题,您可以尝试使用files.delete(path(orararound