2012-08-06 66 views
2

我已經有一個可以工作的代碼,但是我不希望它真的在可能的情況下刪除臨時文件夾。我正在使用Apache的fileutils。還有誰知道如何排除文件夾被刪除?在java中遞歸刪除一個文件夾

public class Cleartemp { 
    static String userprofile = System.getenv("USERPROFILE"); 
    public static void main(String[] args) { 
     try { 
      File directory = new File(userprofile+"\\AppData\\Local\\Temp"); 
      // 
      // Deletes a directory recursively. When deletion process is fail an 
      // IOException is thrown and that's why we catch the exception. 
      // 
      FileUtils.deleteDirectory(directory); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

您可以在刪除它之後創建一個新的Temp文件夾。 – zanegray 2012-08-06 22:33:47

+0

或使用FileUtils :: iterateFiles刪除每個文件。 – zanegray 2012-08-06 22:34:46

+0

你想刪除它的內容嗎? – davidbuzatto 2012-08-06 22:35:06

回答

0

如何FileUtils.cleanDirectory添加例外?它清理一個目錄而不刪除它。

如果你需要一些過濾邏輯,你也可以使用Apache Commons DirectoryWalker。該頁面上的示例之一包括FileCleaner實現。

+0

我會將此視爲一個選項。我也在考慮指定多個目錄,並且過濾器似乎也這樣做。 – jerhynsoen 2012-08-06 23:52:43

1

這裏是一個真正的遞歸方法:

public void deleteDirectory(File startFile, FileFilter ignoreFilter) { 
    if(startFile.isDirectory()) 
     for(File f : startFile.listFiles()) { 
      deleteDirectory(f, ignoreFilter); 
     } 
    if(!ignoreFilter.accept(startFile)) { 
     startFile.delete(); 
    } 
} 

手工指定一個文件過濾器設置爲目錄返回true(見下文),使其不會刪除目錄。您也可以爲其他文件也

FileFilter folderFilter = new FileFilter() { 

     @Override 
     public boolean accept(File paramFile) { 
      return paramFile.isDirectory(); 
     } 

    }; 
+0

這是刪除文件的java方法。我想這會工作,但我一直喜歡更多的Apache的方式。我也需要它來排除特定的文件夾,而不是一般的文件夾。我可能會得到的是isDirectory()。 – jerhynsoen 2012-08-06 22:52:43

0

首次發佈,不認爲自己是專家,但我堅持與1.4 ...

這裏是行之有效遞歸刪除方法,刪除所有文件和子文件夾的父文件夾,然後在父文件夾本身,假設傳遞的文件是一個目錄,就像我的情況一樣。

private void deleteTemp(File tempDir) { 
    File[] a = (tempDir.listFiles()); 
     for (int i = 0; i < a.length; i++) { 
      File b = a[i]; 
       if (b.isDirectory()) 
        deleteTemp(b); 

       b.delete(); 
     } 

     tempDir.delete(); 
}