假设在工作空间中有项目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)判断。