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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了删除在Windows资源管理器中打开的嵌套文件夹时的Java奇怪行为相关的知识,希望对你有一定的参考价值。

我有这样的文件夹结构(没有任何文件进行简单的测试):

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:ABC
Delete Fail: D:AB => children:[D:ABC]
Delete Fail: D:A => children:[D:AB]

删除D: A B C时非常奇怪,但之后我仍然得到D: A B C作为D: A B的子节点

我可以认为这是一个JRE错误吗?我使用的是Windows 10 64位,JDK 8。

答案

我也认为file.delete()有一些windows权限问题,你可以尝试Files.delete(路径)来解决

以上是关于删除在Windows资源管理器中打开的嵌套文件夹时的Java奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章

从 IntelliJ 在 Windows 资源管理器中打开包含目录

从 Windows 资源管理器中打开 VS Code 中的文件夹

如何删除Windows10操作系统资源管理器中的下载图片音乐文档视频桌面3D对象这7个文件夹

如何在 Windows 资源管理器中添加“在此处打开 git-bash ...”上下文菜单?

Windows 10 删除资源管理器中7个文件夹

Windows 资源管理器中未显示文件大小