Java - 使用 File.deleteOnExit() 删除目录

问题描述 投票:0回答:0

我正在学习如何使用

deleteOnExit()
删除目录。据我所知,它只能在文件夹为空时删除它。所以下面是递归擦除子文件/文件夹,然后最终擦除根目录的方法。

static void deleteFile(File path){
    if (!path.exists()) return;
    path.deleteOnExit();
}


static void deleteFolder(File path){
    if (!path.exists()) return;

    //clean children
    for (File f : path.listFiles()){
        if (f.isDirectory()){
            deleteFolder(f);
        }
        else{
            deleteFile(f);
        }
    }

    //clean root
    path.deleteOnExit();
}

这是一个文件夹示例结构以及我如何调用该方法

//folder structure
parent_folder
|---child_folder
    |---child2_file
|--child_file

//calling method
Path path = Path.of("src/p - Copy");
deleteFolder(path.toFile());

样本结构结果如下。在我看来,只有子文件会被删除。请注意,如果我多次重新运行代码,

child_folder
最终会被删除(因为这次
child2_folder
被删除),然后
parent_folder
.

parent_folder
|---child_folder

然而在

deleteFolder
方法中,如果我先交换两个部分,那么。整个目录
parent_folder
根据需要被清除。

//clean root
path.deleteOnExit();

//clean children
for (File f : path.listFiles()){
    if (f.isDirectory()){
        deleteFolder(f);
    }
    else{
        deleteFile(f);
    }
}

是什么导致此方法以如此相反的顺序运行?

提前谢谢你。

java file-io java-stream
© www.soinside.com 2019 - 2024. All rights reserved.