Java實現遞歸刪除目錄下所有文件


遞歸刪除目錄下所有文件

什么是遞歸

要遞歸首先需要有方法。遞歸,即方法自己調用自己。一般在程序中很少使用,但在這個實現中,我們無法知道文件夾的深度,更無法根據深度來實現循環的嵌套。

遞歸兩個重要條件:

  • 終止邊界
  • 重復執行相同的問題

例如我們要實現求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() 刪除此抽象路徑名表示的文件或目錄,如果文件夾中有文件存在,則該文件夾不能被刪除。

要刪除一個目錄下的所有文件和文件夾,我們可以分為這么幾步:

  1. 首先我們指定一個根目錄作為我們要刪除的對象;
  2. 例舉該目錄下所有子文件和文件夾;
  3. 遍歷子目錄文件,如果為文件,則直接刪除;如果為文件夾,則執行 2 
  4. 將所有子文件、子文件夾都刪除完畢后,刪除文件夾本身

如下圖所示,把圈代表文件,方塊代表文件夾,則得到如下的執行順序:

        

  1. 判斷file為不為空的文件夾,到2
  2. 判斷subfile1為不為空的文件夾,到3
  3. 判斷srf1為文件,刪除自己,到4
  4. 判斷sf2為空文件夾,刪除自己,到5
  5. 此時subfile1中所有內容都已刪除為空,subfile1刪除自己,到6
  6. subfile2不為空文件夾,到7
  7. slf為文件,刪除自己,到8
  8. subfile2為空文件夾,刪除自己,到9
  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 }
刪除所有文件

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM