1. 程式人生 > 實用技巧 >Java—遞迴

Java—遞迴

遞迴

1. 概述

方法中呼叫當前方法

2. 遞迴需要注意的事項

遞迴次數不能過多,否則記憶體溢位

3. 案例

3.1 獲取指定目錄下的檔名
public class AllDirPath {
	/*
	 * 遞迴列印所有子目錄中的檔案路徑
	 */
	public static void main(String[] args) {
		// 1. 獲取要查詢的目錄,判斷該檔案是否存在
		File file = new File("e:/培訓");
		
		// 2. 存在,獲取該目錄下所有的檔案
		// 3. 判斷此檔案是否為資料夾;是的話繼續第2步,直到結束
		// 所以2和3開始需要遞迴;把其封裝到一個方法中
		getAllFile(file);
	}

	private static void getAllFile(File file) {
		// 2. 存在,獲取該目錄下所有的檔案
		// 3. 判斷此檔案是否為資料夾;是的話繼續第2步,直到結束
		if(file.exists()){
			File[] listFiles = file.listFiles();
			for(File f: listFiles){
				if(f.isDirectory()){
					getAllFile(f);
				}else{
					System.out.println(f.getName());
				}
			}
		}else{
			System.out.println("要查詢的目錄還不存在,請先去建立!");
		}
	}
}
3.2 刪除指定目錄
public class DelDir {
	public static void main(String[] args) {
		// 獲取指定要刪除目錄
		File file = new File("e:/peixun");
		deleteDir(file);
	}

	public static void deleteDir(File file) {
		// 先進行判斷是否為資料夾
		if(file.isDirectory()){
			File[] listFiles = file.listFiles();
			for (File tempFile : listFiles) {
				deleteDir(tempFile);
			}
			
			// 直至資料夾為空時,刪除資料夾
			boolean delete = file.delete();
			System.out.println(file.getName() + "..." + delete);
		}else{
			// 不是資料夾直接刪
			boolean delete = file.delete();
			System.out.println(file.getName() + "..." + delete);
		}
	}
}