我正在学习如何使用
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);
}
}
是什么导致此方法以如此相反的顺序运行?
提前谢谢你。