Java 递归删除目录
我正在尝试递归地删除目录。但我有一些问题。 因此,我在我的“测试”文件夹中创建了一些目录,如图所示。但在第三个文件夹中,它抛出一个异常java.lang.NullPointerException 以下是图片和一些代码:Java 递归删除目录,java,recursion,rm,Java,Recursion,Rm,我正在尝试递归地删除目录。但我有一些问题。 因此,我在我的“测试”文件夹中创建了一些目录,如图所示。但在第三个文件夹中,它抛出一个异常java.lang.NullPointerException 以下是图片和一些代码: public static void RecursiveRm (String myFile) { File fl = new File(myFile); String [] temp = fl.list(); if(temp.length > 0){
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();
}
publicstaticvoidrecursiverm(字符串myFile)
{
文件fl=新文件(myFile);
字符串[]temp=fl.list();
如果(温度长度>0){
对于(int i=0;i
这就是它的工作原理
你不应该一开始就这样做
myFile = myFile + "/" + temp[i];
这意味着,如果目录中包含a
b
和c
,则路径将变为/a/b/c
,您应该避免更改myFile
试试这个
for(String file: new File(myFile).list()) {
recursiveRm(myFile + "/" + file);
}
fl.delete();
如果目录不存在,则很可能会收到NullPointerException作为
File.list()
returnnull
。一开始就不应该这样做
myFile = myFile + "/" + temp[i];
这意味着,如果目录中包含a
b
和c
,则路径将变为/a/b/c
,您应该避免更改myFile
试试这个
for(String file: new File(myFile).list()) {
recursiveRm(myFile + "/" + file);
}
fl.delete();
如果目录不存在,则最有可能获得NullPointerException作为
File.list()
返回null
。查看代码后,如果找不到子目录,则从fl.list()获得NullPointerException。在代码更改中:
if(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();
}
publicstaticvoidrecursiverm(字符串myFile)
{
文件fl=新文件(myFile);
字符串[]temp=fl.list();
如果(temp!=null&&temp.length>0){
对于(int i=0;i
查看代码后,如果找不到子目录,则会从fl.list()中得到一个NullPointerException。在代码更改中:
if(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();
}
publicstaticvoidrecursiverm(字符串myFile)
{
文件fl=新文件(myFile);
字符串[]temp=fl.list();
如果(temp!=null&&temp.length>0){
对于(int i=0;i
您能告诉我们它抛出了什么异常吗?(NullPointerException、IOException等)请添加整个stacktrace。当然,它是在问题中添加的。您能告诉我们它抛出了什么异常吗?(NullPointerException、IOException等)请添加整个stacktrace。当然,问题中添加了它。是的,这就是图片中提到的问题。谢谢=)对不起,我重新运行了它,发现有一个逻辑错误。删除“else”,我已经更新并测试了我的答案。非常感谢!我真的很想接受你的回答,但彼得的回答更简洁。很抱歉(是的,这就是图片上提到的问题。谢谢=)对不起,我重新运行了它,发现有一个逻辑错误。删除“else”,我已经更新并测试了我的答案。非常感谢!我真的很想接受你的回答,但彼得的回答更简洁。对不起(