我试图以递归方式删除目录。但是我遇到了一些问题。 所以,我在我的“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();
}
这就是它的工作原理
答案 0 :(得分:4)
你一开始就不应该这样做。
myFile = myFile + "/" + temp[i];
这意味着,如果您的目录中包含a
b
和c
,则路径将变为/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();
}