假設在工作空間中有項目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)判斷。