2014-09-30 165 views
0

我想遞歸移除一個目錄。但是我有一些問題。 因此,我在我的「測試」文件夾中創建了一些目錄,如圖所示。但是在第三個文件夾中,它拋出了一個java.lang.NullPointerException異常。遞歸刪除目錄

這裏的圖片和一些代碼:

public static void RecursiveRm (String myFile) 
{ 
    File fl = new File(myFile); 
    String [] temp = fl.list(); 
    if(temp.length > 0){ 
     for (int i = 0; i < temp.length; ++i){ 
      myFile = myFile + "/" + temp[i]; 
      RecursiveRm(myFile); 
     } 
    } 
    else 
     fl.delete(); 
} 

這就是它是如何工作的

That's how it works

+1

你能告訴我們它拋出什麼異常? (NullPointerException,IOException等) – 2014-09-30 18:43:09

+1

請添加整個堆棧跟蹤。 – Jens 2014-09-30 18:44:14

+0

當然,它被添加在問題 – 2014-09-30 18:44:24

回答

4

你不應該這樣做的一個開始。

myFile = myFile + "/" + temp[i]; 

這意味着,如果你有在它abc一個目錄的路徑將成爲/a/b/c你應該避免改變myFile

試試這個。

for(String file: new File(myFile).list()) { 
    recursiveRm(myFile + "/" + file); 
} 
fl.delete(); 

最有可能你得到一個NullPointerException作爲File.list()回報null如果該目錄不存在。

+1

Dayymn中。這樣可行!!!謝謝=) – 2014-09-30 18:48:04

+0

它像手錶一樣工作) – 2014-09-30 18:55:44

2

查看您的代碼後,如果未找到子目錄,則會從fl.list()中獲取NullPointerException。在你的代碼更改:

if(temp.length > 0) 

if(temp != null && temp.length > 0) 

完全改變代碼:

public static void RecursiveRm (String myFile) 
{ 
    File fl = new File(myFile); 
    String [] temp = fl.list(); 
    if(temp != null && temp.length > 0){ 
     for (int i = 0; i < temp.length; ++i){ 
      myFile = myFile + "/" + temp[i]; 
      RecursiveRm(myFile); 
     } 
    } 

    fl.delete(); 
} 
+0

是的,這就是它在圖片上提到的問題。謝謝=) – 2014-09-30 18:49:57

+0

我試過你的代碼。它不起作用=( – 2014-09-30 19:02:45

+0

對不起,我重新運行它,並意識到有一個邏輯錯誤。刪除'其他' 我已更新和測試我的答案 – milk3422 2014-09-30 19:13:31