删除在Windows资源管理器中打开的嵌套文件夹时的Java奇怪行为

时间:2018-02-26 08:14:28

标签: java file io

我有一个像这样的文件夹结构(没有任何文件用于简单测试):

  

d:\ A \乙\ 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 64bit,JDK 8。

1 个答案:

答案 0 :(得分:1)

我还认为file.delete()有一些windows权限问题,你可以尝试使用Files.delete(路径)进行解决吗?