2017-08-02 131 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

文件(或目錄)在相反順序中被刪除,它們被註冊。