Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 递归删除目录_Java_Recursion_Rm - Fatal编程技术网

Java 递归删除目录

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){

我正在尝试递归地删除目录。但我有一些问题。 因此,我在我的“测试”文件夹中创建了一些目录,如图所示。但在第三个文件夹中,它抛出一个异常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();
}
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()
return
null

一开始就不应该这样做

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”,我已经更新并测试了我的答案。非常感谢!我真的很想接受你的回答,但彼得的回答更简洁。对不起(