使用递归实现文件夹的遍历,查找和删除操作
最近学习了File类和递归法,于是便想写一个包含文件夹的遍历,文件的精确查找和按条件查找,对非空文件夹的删除的案例,想和大家交流一下。
涉及内容:递归方法的使用,File基本知识。
设计亮点:
1.对于.多级目录的打印,遍历之前,无从知道到底有多少级目录,所以我们使用递归来实现。
2.. 遍历目录时,获取的子文件,通过文件名称,判断是否符合条件。
2.1对于精确查找,我们通过文件名称的对比来实现查找。
2.2对于按条件查找,我们通过文件后缀的对比来实现查找。
3.由于File中的delete方法删除的文件夹必须为空,我们便使用递归遍历与删除相结合的方式来删除文件夹。
源码:
实现代码:
package cn.homeWork01.demo06Recurison;
// 目录遍历及搜索并删除此非空文件夹
import java.io.File;
public class Demo01 {
public static void main(String[] args) {
// 此文件夹为进行操作的文件夹
File file = new File("F:\\Test\\src");
// 调用遍历文件夹的方法
printFile(file);
// 调用搜索文件方法
// 此处须切换47——50行处代码实现不同方式的查找
// 当前方法为按文件名精确查找
search(file,"Demo03.java");
// 此处为按文件后缀查找
search(file,".java");
// 调用删除文件夹方法
delete(file);
}
// 遍历文件夹
public static void printFile(File file){
File[] dirs = file.listFiles();
// 输出文件夹的绝对路径
System.out.println(file);
for (File dir : dirs) {
if(dir.isDirectory()){
// 调用递归,逐层搜索
printFile(dir);
}else{
// 输出文件名称
System.out.println(dir.getName());
}
}
}
// 按条件查找
public static void search(File file,String name){
File[] dirs = file.listFiles();
for (File dir : dirs) {
if(dir.isDirectory()){
// 调用递归,逐层搜索
search(dir,name);
}else // 按文件名精确查找
//if(dir.getName().equals(name)){
// 按后缀查找
if(dir.getName().toLowerCase().endsWith(name)){
// 输出文件夹的绝对路径
System.out.println(file);
// 输出文件名称
System.out.println(dir.getName());
}
}
}
// 删除文件夹
public static void delete(File file){
File[] dirs = file.listFiles();
for (File dir : dirs) {
if(dir.isDirectory()){
// 调用递归,逐层删除
delete(dir);
}else{
// 删除文件
boolean b = dir.delete();
System.out.println(dir.getName()+" 删除状态:"+b);
}
}
// 删除文件夹
boolean b = file.delete();
System.out.println(file.getName()+" 删除状态:"+b);
}
}
运行截图(部分截图):
遍历文件夹截图:
(此处为遍历src文件夹)
精确查找文件截图:
(此处为查找Demo03.java文件)
按条件查找文件截图:
(此处为查找以.java结尾的文件)
删除非空文件夹截图:
(此处为删除src文件夹)
注意:
src文件夹文件较多,看起来不太方便,非常抱歉!
本案例还有很多不足之处,希望大家能够及时纠正。当然更希望能够对您有用!