遞歸刪除目錄下所有文件
什么是遞歸
要遞歸首先需要有方法。遞歸,即方法自己調用自己。一般在程序中很少使用,但在這個實現中,我們無法知道文件夾的深度,更無法根據深度來實現循環的嵌套。
遞歸兩個重要條件:
- 終止邊界
- 重復執行相同的問題
例如我們要實現求1*2*3*4*5,我們可以把5和1*2*3*4的結果相乘,而如何獲取1*2*3*4的結果呢,自然就是4與1*2*3*4的結果相乘了。而在這一過程中,我們始終是做同一件事:將n與n-1的階乘進行相乘。當然不可能無止境的乘下去,所以我們需要一個終止條件:n == 1。在這兩個條件下,我們便可以實現遞歸求得n的階乘了。

用代碼實現如下:
1 public static int jieCheng(int n) { 2 if (n==1) { //終止條件 3 return 1; 4 } else { 5 return n * jieCheng(n-1); //n * (n-1)! 6 } 7 }
類 File
Java文件類以抽象的方式代表文件名和目錄路徑名。該類主要用於文件和目錄的創建、文件的查找和文件的刪除等。
用到的方法
File(String pathname) 通過將給定路徑名字符串轉換為抽象路徑名來創建一個新File實例。isDirectory() 測試此抽象路徑名表示的文件是否是一個目錄。listFiles() 返回一個抽象路徑名數組,這些路徑名表示此抽象路徑名表示的目錄中的文件(獲取子目錄文件)。delete() 刪除此抽象路徑名表示的文件或目錄,如果文件夾中有文件存在,則該文件夾不能被刪除。
要刪除一個目錄下的所有文件和文件夾,我們可以分為這么幾步:
- 首先我們指定一個根目錄作為我們要刪除的對象;
- 例舉該目錄下所有子文件和文件夾;
- 遍歷子目錄文件,如果為文件,則直接刪除;如果為文件夾,則執行 2
- 將所有子文件、子文件夾都刪除完畢后,刪除文件夾本身
如下圖所示,把圈代表文件,方塊代表文件夾,則得到如下的執行順序:
- 判斷file為不為空的文件夾,到2
- 判斷subfile1為不為空的文件夾,到3
- 判斷srf1為文件,刪除自己,到4
- 判斷sf2為空文件夾,刪除自己,到5
- 此時subfile1中所有內容都已刪除為空,subfile1刪除自己,到6
- subfile2不為空文件夾,到7
- slf為文件,刪除自己,到8
- subfile2為空文件夾,刪除自己,到9
- 此時根目錄file已經為空文件夾了,再刪除自己。至此,所有文件和文件夾刪除完畢
用代碼實現就是以下的效果:
1 public static void delDir(File file) { 2 if (file.isDirectory()) { 3 File zFiles[] = file.listFiles(); 4 for (File file2 : zFiles) { 5 delDir(file2); 6 } 7 file.delete(); 8 } else { 9 file.delete(); 10 } 11 }
