2014-09-30 171 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