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

标签 java file io

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

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 Explorer 中打开路径 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作为 child D:\A\B

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

最佳答案

我还认为 file.delete() 在 Windows 权限方面存在一些问题,您可以尝试使用 Files.delete(path) 来解决问题吗

关于删除在 Windows 资源管理器中打开的嵌套文件夹时的 Java 奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48984043/

相关文章:

java - 跟踪 Windows 和 Mac 中的文件系统更改

使用 jpalq 查询将 Java DTO 放入列表中

Python:如何知道我 append 文本的文件是否存在或刚刚创建?

file - 使用Delphi从文件中删除奇偶校验位(每9位)

c - 尝试使用字符串搜索随机访问文件

java - 在字符串变量中携带一个小图像文件?

java - JTable不显示Object[][]数据

c++ - 如何通过预处理文件来访问 O(1) 中文件中的一行?

Java 找不到 .property 文件 Ubuntu

c++ - 如何计算文本文件中特定单词的出现次数