递归删除文件,但不删除根目录

        前提:最近在做开发的时候,要求删除文件夹中的子文件夹和文件,但不能删除根目录。

现在先把代码给贴上来,再分析分析代码。代码已经测试过,完成可以实现要求。

import java.io.*;
public class testFile618{

public static void main(String[] args){
	String path = "D:\\test1";
	File file = new File(path);
	deleteData(file);
}

static void deleteData(File file) {
		File[] deleteFiles = file.listFiles();
		if (deleteFiles.length == 0) {
			return;
		}
		else {
			for (int i = 0; i < deleteFiles.length; i++) {
				if (deleteFiles[i].isDirectory()) {
					deleteData(deleteFiles[i].getAbsoluteFile());
					deleteFiles[i].delete();
				}
				else {
					deleteFiles[i].delete();
				}
			}
		}
	}
}

在代码中,使用了递归,也必须要求递归来找到子文件夹中的文件,并删除。

        在这里首先要注意的是在java的file中的delete()方法只能删除文件和空的文件夹,如果文件夹中有文件则不能删除,在相关的API中有相应的介绍。

既然如此,那我们就先递归,找到子文件夹中的文件,再将子文件夹中的文件删除掉,然后再删除相应的子文件夹。在代码中,我们先用listFiles()方法列出根目录中的文件和子文件夹,并将这些文件和文件夹放到一个File[]数组中。然后在依次一个一个的判断是文件还是文件夹,如果是文件则直接用delete()方法删除,如果是文件夹则调用deleteData()方法进行递归,找到子文件夹中的文件。在这里,我只删除了根目录下的文件和子文件夹,这是怎么做到的呢?关键就在以下代码中:

if (deleteFiles[i].isDirectory()) {
					deleteData(deleteFiles[i].getAbsoluteFile());
					deleteFiles[i].delete();
				}

在代码中,进行递归调用,调用完了再删除子文件夹,这样就不会删除根目录了。

在本段代码中,实现的方式有很多,主要看我们需要处理的参数是什么样的了。我这里是处理File类型的参数。

在网络中也有很多相关的代码,大家也可以用来参考。实现的思路是差不多的。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值