2017-08-02 171 views
1

有没有办法在Java孤儿inode,以便操作系统可以清理它们?让操作系统删除文件

我的目标是递归删除一个文件夹,但删除时它并不重要,就是这样。由于及时删除它需要一段时间,并减慢我的速度,我一直在使用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(); 
} 

回答

2

标记为删除文件夹标记的任何文件夹内容之前:

public static void markBelow(File folder){ 
    folder.deleteOnExit(); 
    for(File file: folder.listFiles()){ 
     if(file.isDirectory()){ 
      markBelow(file); 
     } else { 
      file.deleteOnExit(); 
     } 
    } 
} 

这是因为从deleteOnExit的删除发生在相反的顺序,按the docs

文件(或目录)在相反顺序中被删除,它们被注册。