递归删除目录

时间:2014-09-30 18:40:48

标签: java recursion rm

我试图以递归方式删除目录。但是我遇到了一些问题。 所以,我在我的“test”文件夹中创建了一些目录,如图所示。但在第3个文件夹中,它会抛出异常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

2 个答案:

答案 0 :(得分:4)

你一开始就不应该这样做。

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

这意味着,如果您的目录中包含a bc,则路径将变为/a/b/c您应该避免更改myFile

试试这个。

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

如果目录不存在,很可能会因为File.list()返回null而收到NullPointerException。

答案 1 :(得分: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();
}