フォルダとその中のすべてのファイルを再帰的に削除します(rm -frの機能をシミュレートします)

新しいテストディレクトリを作成し、その中に新しいテストファイルとテストディレクトリを作成します。ファイルツリーは次のとおりです。
ここに画像の説明を挿入
コードの記述:
クラスの削除:

package com.cao.demo.delete;

import java.io.File;

/**
 * 作者:曹浩东
 * 实现递归 rm -fr 的功能
 */
public class Delete {
    
    
    public void recursionDelete(String path) {
    
    
        File file = new File(path);//根据传进来的路径path实例化一个File对象
        File[] files = file.listFiles();//返回 path路径下的所有文件 的文件对象
        String fileName;//用于存储文件名
        //对 files文件对象数组 遍历
        for (int i = 0; i < files.length; i++) {
    
    
            fileName = files[i].getName();
            //判断是否是文件夹
            if (files[i].isDirectory()) {
    
    
                //如果该目录下为空,那么该目录可以删除成功,并返回true
                if (files[i].delete()) {
    
    
                    System.out.println(fileName + "已经被删除...");
                } else {
    
    
                    //若删除不成功,说明该目录下有文件存在,则递归调用本方法,参数为该目录
                    recursionDelete(files[i].getPath());
                }
            }
            //判断是否为文件,是则直接删除
            if (files[i].isFile()) {
    
    
                files[i].delete();
                System.out.println(fileName + "已经被删除...");
            }
        }
        //最后删除path路径所指向的目录(根目录)
        System.out.print(file.getName());
        file.delete();
        System.out.println("已经被删除...");
    }
}

テストクラス:

package com.cao.demo.delete;

public class Test {
    
    
    public static void main(String[] args) {
    
    
        Delete d=new Delete();
        d.recursionDelete("C:\\iweb\\1");
    }
}
C:\Java\jdk1.8.0_181\bin\java.exe "...
1_1_1已经被删除...
1_1_2.txt已经被删除...
1_1已经被删除...
1_2_1已经被删除...
1_2已经被删除...
1_3.txt已经被删除...
1_4.txt已经被删除...
1已经被删除...

Process finished with exit code 0

ファイルの削除順序は、ファイルツリーの順序後の走査順序であることがわかります。
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_44371305/article/details/113616406