File类的使用——遍历所有文件及子文件以及遍历删除

本文介绍了如何使用Java的IO操作遍历所有文件及子文件,重点在于递归方法的应用。同时,文章讲解了如何按照特定格式打印文件路径以提高可读性。此外,还探讨了文件删除的操作,特别是模拟软件卸载过程中的遍历删除文件夹的逻辑,强调了删除顺序的重要性。

遍历所有文件和子文件

通过文件流遍历,核心就是【递归】,递归的基线就是文件层级,如果是文件夹层级,则调用自己,进行递归。

这里在格式上还进行了约束,要求按照如下格式进行输出打印,以方便阅读。

|D:\Java\practice
|__D:\Java\practice\.metadata
|____D:\Java\practice\.metadata\.lock
|____D:\Java\practice\.metadata\.log

这里将遍历封装了函数,然后将格式打印封装为另一个函数,在遍历方法内部调用了private类修饰的格式打印函数。

/**
*遍历文件和文件夹
*@param dir File类对象
*@param level int类型,表示当前File的文件夹级别,用于调用getSeparatro()方法,以确定格式打印
*/
public static void listDir(File dir, int level) {
	System.out.println(getSeparatro(level) + dir.toString());   //父目录打印,标识作用,可以删除
	File[] files = dir.listFiles();
	level++;	//递归,每次会【溯回】操作,对应文件夹的等级会被记录
	if (null != files && 0 < files.length) {
	    for (File file : files) {
	    	//判断是否为文件夹,如果是,则递归,直到基线为文件为止
	        if (file.isDirectory()) {
	            listDir(file, level);
	        } else {
	            System.out.println(getSeparatro(level) + file);
	        }
	    }
	}
}

/**
* 判断生成多少分隔符
* @param level 0表示没有分隔符
* @return String类型,返回目录前面的标识符
*/
private static String getSeparatro(int level) {
    StringBuilder sb = new StringBuilder();
    sb.append("|");
    for (int i = 0; i < level; i++) {
        sb.append("__");
    }
    return sb.toString();
}

//打印结果
|D:\Java\practice
|__D:\Java\practice\.metadata
|____D:\Java\practice\.metadata\.lock
|____D:\Java\practice\.metadata\.log
|____D:\Java\practice\.metadata\.mylyn
|______D:\Java\practice\.metadata\.mylyn\.taskListIndex
|________D:\Java\practice\.metadata\.mylyn\.taskListIndex\segments_1
|________D:\Java\practice\.metadata\.mylyn\.taskListIndex\write.lock
|______D:\Java\practice\.metadata\.mylyn\.tasks.xml.zip
|______D:\Java\practice\.metadata\.mylyn\contexts
|______D:\Java\practice\.metadata\.mylyn\repositories.xml.zip
|______D:\Java\practice\.metadata\.mylyn\tasks.xml.zip
|____D:\Java\practice\.metadata\.plugins
|______D:\Java\practice\.metadata\.plugins\org.eclipse.buildship.core
|______D:\Java\practice\.metadata\.plugins\org.eclipse.core.resources
|________D:\Java\practice\.metadata\.plugins\org.eclipse.core.resources\.history
|__________D:\Java\practice\.metadata\.plugins\org.eclipse.core.resources\.history\0
|____________D:\Java\practice\.metadata\.plugins\org.eclipse.core.resources\.history\0\30b7de5

遍历删除所有文件及子文件

电脑上的软件的卸载,本质都是遍历删除,由于程序只能将空文件夹删除,所以必须依据从内到外,由底层到顶层的顺序去一层层的遍历删除。

public static void deleteFile(File dir) {
	File[] files = dir.listFiles();
	if (files != null && files.length > 0) {
	    for (File file : files) {
	    	//判断是否为文件夹,如果是,则递归,直到到达基线(文件层级)为止,然后溯回
	        if (file.isDirectory()) {
	            deleteFile(file);
	        } else {
	            System.out.println(file.toString() + ":" + file.delete());
	        }
	    }
		//dir.delete() 方法,返回的是boolean值
	    System.out.println(dir.toString() + ":" + dir.delete());
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值