【递归算法】以删除多级目录为例

假设在工作空间中有项目demo01,项目中有多级目录demo\a\s\d\f\g。完整路径:workspace\demo01\demo\a\s\d\f\g

现在要用递归算法实现一次删除多级目录demo\a\s\d\f\g

代码如下:

package file;
import java.io.File;
public class DeleteFileDemo {
	public static void main(String[] args){
		File dir = new File("demo");
		DeleteFileDemo test = new DeleteFileDemo();
		test.delete(dir);
	}
	
	public void delete(File file){
		while(file.exists()){
			if(file.isFile()){
				file.delete();
			}else{
				File[] subs = file.listFiles();
				if(subs.length==0){
					file.delete();
				}else{
					for(int i=0;i<subs.length;i++){
						delete(subs[i]);
					}
				}
			}	
		}
	}

}

上面的代码虽然实现了用递归算法一次删除多级目录的需求,但是整个业务逻辑非常复杂,用到了太多的循环和分支,所以继续优化如下:

package file;
import java.io.File;
public class DeleteFileDemo {
	public static void main(String[] args){
		File dir = new File("demo");
		DeleteFileDemo test = new DeleteFileDemo();
		test.delete(dir);
	}
	
	public void delete(File file){
		if(file.isDirectory()){
			File[] subs = file.listFiles();
			for(int i=0;i<subs.length;i++){
				delete(subs[i]);
			}
		}
		file.delete();
	}

}

优化思路:

1.文件和空目录都可以直接删除,所以不需要分别判断并删除;

2.将file.delete()放在最后,则可以保证file必定被删除,不需要再用while(file.exists)判断。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值