Java刪除檔案或目錄及目錄下所有檔案

來源:互聯網
上載者:User

標籤:路徑   分析   ring   director   exist   檔案的   測試   最簡   style   

  一直在做C++相關開發的工作。突然某一天一時興起,想學習下Java開發。然後再網上找到一本Java簡明教程,入門是夠用了。看到檔案IO這一章,想起之前用C++做的刪除檔案或目錄的練習,於是打算用Java來實現這個功能。本以為很簡單的功能,還是遇到一些問題。仔細分析下代碼,定位到出問題的地方。在此處記錄下,提醒自己不會重蹈覆轍。

1. 第一版的刪除函數是這樣寫的

 1 static boolean delFile(String filename) { 2         File file = new File(filename); 3         if (!file.exists()) { 4             return false; 5         } 6  7         if (file.isFile()) { 8             return file.delete(); 9         } else {10             String[] filenames = file.list();11             for (String f : filenames) {12                 delFile(f);13             }14             return file.delete();15         }16     }

  代碼能編譯過,但是運行結果並不符合預期結果。如果在一個大型系統,出現這樣的問題,往往是一件很頭疼的小事。我的做法是,遇到自己不熟悉的,先自己建一個小工程實現這一功能,添加測試案例。如果測試通過,才會移植到大系統上去。

  經過仔細分析,上面的代碼出問題的地方是第10行,file.list()返回的結果是當前路徑下的所有檔案的檔案名稱,並不包含路徑。所以遞迴調用時,因為檢測檔案不存在,而返回。然後就有下面這一版。

2. 正確的刪除檔案或目錄方法

 1 static boolean delFile(File file) { 2         if (!file.exists()) { 3             return false; 4         } 5  6         if (file.isFile()) { 7             return file.delete(); 8         } else { 9             File[] files = file.listFiles();10             for (File f : files) {11                 delFile(f);12             }13             return file.delete();14         }15     }

  這版的代碼直接以檔案對象File為參數,file.listFiles()返回的也是自檔案的File對象集合。File對象儲存了該檔案的具體位置,因此不會出現上一版出現的問題,這一版能正常的工作。

  代碼雖然能正常工作,但不是最簡潔的版本。下面有一個更為簡潔的版本。

3. 簡單並能正常工作的版本

 1 static boolean delFile(File file) { 2         if (!file.exists()) { 3             return false; 4         } 5  6         if (file.isDirectory()) { 7             File[] files = file.listFiles(); 8             for (File f : files) { 9                 delFile(f);10             }11         }12         return file.delete();13     }

同樣可以正常工作,但是代碼沒有重複的。

Java刪除檔案或目錄及目錄下所有檔案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.