在java中是否有一种方法可以使用孤立的inode,以便os可以清理它们?
我的目标是以递归方式删除文件夹,但删除它时无关紧要,只是确实如此。由于及时删除它需要一段时间并使我慢下来,我一直在使用File.deleteOnExit()
,但这会使目录框架保持原位。有没有可以做到这一点的解决方案?这就是我现在所做的:
public static void markAllForDeletion(String folderName){
String newName = folderName + " " + UUID.randomUUID().toString();
new File(folderName).renameTo(new File(newName));
markBelow(new File(newName));
}
public static void markBelow(File folder){
for(File file: folder.listFiles()){
if(file.isDirectory()){
markBelow(file);
} else {
file.deleteOnExit();
}
}
folder.deleteOnExit();
}
答案 0 :(得分:2)
在标记任何文件夹内容之前,将文件夹标记为删除:
public static void markBelow(File folder){
folder.deleteOnExit();
for(File file: folder.listFiles()){
if(file.isDirectory()){
markBelow(file);
} else {
file.deleteOnExit();
}
}
}
这是因为根据the docs,deleteOnExit
的删除按相反的顺序进行:
文件(或目录)将以反向顺序删除,并注册它们。