前提:最近在做开发的时候,要求删除文件夹中的子文件夹和文件,但不能删除根目录。
现在先把代码给贴上来,再分析分析代码。代码已经测试过,完成可以实现要求。
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类型的参数。
在网络中也有很多相关的代码,大家也可以用来参考。实现的思路是差不多的。