【遞歸算法】以刪除多級目錄爲例

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章