使用递归实现文件夹的遍历,查找和删除操作

最近学习了File类和递归法,于是便想写一个包含文件夹的遍历,文件的精确查找和按条件查找,对非空文件夹的删除的案例,想和大家交流一下。

涉及内容:递归方法的使用,File基本知识。

设计亮点:

1.对于.多级目录的打印,遍历之前,无从知道到底有多少级目录,所以我们使用递归来实现。

2.. 遍历目录时,获取的子文件,通过文件名称,判断是否符合条件。

2.1对于精确查找,我们通过文件名称的对比来实现查找。

2.2对于按条件查找,我们通过文件后缀的对比来实现查找。

3.由于File中的delete方法删除的文件夹必须为空,我们便使用递归遍历与删除相结合的方式来删除文件夹。

源码:

实现代码:

 1 package cn.homeWork01.demo06Recurison;
 2 
 3 // 目录遍历及搜索并删除此非空文件夹
 4 
 5 import java.io.File;
 6 
 7 public class Demo01 {
 8     public static void main(String[] args) {
 9         // 此文件夹为进行操作的文件夹
10         File file = new File("F:\\Test\\src");
11         // 调用遍历文件夹的方法
12         //printFile(file);
13        // 调用搜索文件方法
14         // 此处须切换47——50行处代码实现不同方式的查找
15         // 当前方法为按文件名精确查找
16         search(file,"Demo03.java");
17         // 此处为按文件后缀查找
18         //search(file,".java");
19         // 调用删除文件夹方法
20         //delete(file);
21     }
22 
23     // 遍历文件夹
24     public static void printFile(File file){
25         File[] dirs = file.listFiles();
26         // 输出文件夹的绝对路径
27         System.out.println(file);
28         for (File dir : dirs) {
29             if(dir.isDirectory()){
30                 // 调用递归,逐层搜索
31                 printFile(dir);
32             }else{
33                 // 输出文件名称
34                 System.out.println(dir.getName());
35             }
36         }
37     }
38 
39     // 按条件查找
40     public static void search(File file,String name){
41         File[] dirs = file.listFiles();
42         for (File dir : dirs) {
43             if(dir.isDirectory()){
44                 // 调用递归,逐层搜索
45                 search(dir,name);
46             }else // 按文件名精确查找
47                  if(dir.getName().equals(name)){
48 
49                 // 按后缀查找
50                 //if(dir.getName().toLowerCase().endsWith(name)){
51                 // 输出文件夹的绝对路径
52                 System.out.println(file);
53                 // 输出文件名称
54                 System.out.println(dir.getName());
55             }
56         }
57     }
58 
59     // 删除文件夹
60     public static void delete(File file){
61         File[] dirs = file.listFiles();
62         for (File dir : dirs) {
63             if(dir.isDirectory()){
64                 // 调用递归,逐层删除
65                 delete(dir);
66             }else{
67                 // 删除文件
68                 boolean b = dir.delete();
69                 System.out.println(dir.getName()+"  删除状态:"+b);
70             }
71         }
72         // 删除文件夹
73         boolean b = file.delete();
74         System.out.println(file.getName()+"  删除状态:"+b);
75     }
76 }

 

运行截图(部分截图):

遍历文件夹截图:

(此处为遍历src文件夹) 

精确查找文件截图:

(此处为查找Demo03.java文件) 

按条件查找文件截图:

(此处为查找以.java结尾的文件) 

删除非空文件夹截图: 

 

(此处为删除src文件夹)

注意:

src文件夹文件较多,看起来不太方便,非常抱歉!

 

本案例还有很多不足之处,希望大家能够及时纠正。当然更希望能够对您有用!

 

posted @ 2020-09-08 21:16  令狐公子♥  阅读(494)  评论(0)    收藏  举报