刪除一個(gè)非空目錄并不是簡單地創(chuàng)建一個(gè)文件對象,然后再調(diào)用delete()就可以完成的。但本文為大家講解如何在Java中使用遞歸方法刪除文件。
要在Java中平臺無關(guān)的方式下安全地刪除一個(gè)非空目錄,你還需要一個(gè)算法。該算法首先刪除文件,然后再從目錄樹的底部由下至上地刪除其中所有的目錄。
只要簡單地在目錄中循環(huán)查找文件,再調(diào)用delete就可以清除目錄中的所有文件:
static public void emptyDirectory(File directory) { File[ ] entries = directory.listFiles( ); for(int i=0; i entries[i].delete( ); } } |
這個(gè)簡單的方法也可以用來刪除整個(gè)目錄結(jié)構(gòu)。當(dāng)在循環(huán)中遇到一個(gè)目錄時(shí)它就遞歸調(diào)用deleteDirectory,而且它也會(huì)檢查傳入的參數(shù)是否是一個(gè)真正的目錄。最后,它將刪除作為參數(shù)傳入的整個(gè)目錄。
static public void deleteDirectory(File dir) throws IOException { if( (dir == null) || !dir.isDirectory) { throw new IllegalArgumentException( "Argument "+dir+" is not a directory. " ); }
File[ ] entries = dir.listFiles( ); int sz = entries.length;
for(int i=0; i if(entries[i].isDirectory( )) { deleteDirectory(entries[i]); } else { entries[i].delete( ); } }
dir.delete(); } |
在Java 1.1以及一些J2ME/PersonalJava的變種中沒有File.listFiles方法。所以只能用File.list,它的返回值一個(gè)字符串?dāng)?shù)組,你要為每個(gè)字符串構(gòu)造一個(gè)新的文件對象。
【編輯推薦】
- JavaOne 2009第三天:微軟與Sun/Oracle攜手并進(jìn)
- 開發(fā)高可移植性J2ME的軟件
- Java虛擬機(jī)(JVM)中的內(nèi)存設(shè)置詳解
- Java中的堆內(nèi)存與棧內(nèi)存分配淺析
- 非常全面的實(shí)用JavaScript開發(fā)工具列表