我有这样的文件夹结构(没有任何文件进行简单的测试):
d:\ A \ B \ C
现在我要删除D:\ A,标准/传统方式是在删除父文件夹之前使用递归来删除子文件/文件夹:
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"));
但是当我在Windows资源管理器中打开路径D:\ A \ B \ C并尝试运行时,这是结果(90%次,但大约10%可以):
Delete OK: D:\A\B\C
Delete Fail: D:\A\B => children:[D:\A\B\C]
Delete Fail: D:\A => children:[D:\A\B]
删除D:\ A \ B \ C时非常奇怪,但之后我仍然得到D:\ A \ B \ C作为D:\ A \ B的子节点
我可以认为这是一个JRE错误吗?我使用的是Windows 10 64位,JDK 8。
我也认为file.delete()有一些windows权限问题,你可以尝试Files.delete(路径)来解决