Java中刪除目錄及目錄下所有文件
序言①:
在Java中,要刪除一個文件,是一件很簡單的事情。So,我們要講解的是——刪除某個目錄及目錄下的所有子目錄和文件。
一、程序代碼
功 能:刪除某個目錄及目錄下的所有子目錄和文件
知識點:
File.delete()用於刪除“某個文件或者空目錄”!所以要刪除某個目錄及其中的所有文件和子目錄,要進行遞歸刪除,具體代碼示例如下:
import java.io.File;
import java.io.IOException;
public class DeleteDirectory {
//程序入口:main()方法
public static void main(String[] args) throws IOException {
String path = "C:\\Users\\admin\\Desktop\\test";
// doDeleteEmptyDir(path);//刪除空的目錄
boolean success = deleteDir(new File(path));
if (success) {
System.out.println("Successfully deleted populated directory: "
+ path);
} else {
System.out.println("Failed to delete populated directory: " + path);
}
}
/**
* 刪除空目錄
*
* @param dir
* 將要刪除的目錄路徑
*/
private static void doDeleteEmptyDir(String dir) {
boolean success = (new File(dir)).delete();
if (success) {
System.out.println("Successfully deleted empty directory: " + dir);
} else {
System.out.println("Failed to delete empty directory: " + dir);
}
}
/**
* 遞歸刪除目錄下的所有文件及子目錄下所有文件
*
* @param dir
* 將要刪除的文件目錄
* @return boolean Returns "true" if all deletions were successful. If a
* deletion fails, the method stops attempting to delete and returns
* "false".
*/
private static boolean deleteDir(File dir) {
if (dir.isDirectory()) {
String[] children = dir.list();
if (children != null && children.length > 0) {
// 遞歸刪除目錄中的子目錄下
for (int i = 0; i < children.length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}
}
// 目錄此時爲空,可以刪除
return dir.delete();
}
}
注意:上面的代碼是在Windows系統的JDK驗證的。對於使用Mac或者linux系統的孩童,路徑寫法是不一樣的,這是因爲:不同的操作系統,使用的路徑分隔符和目錄分隔符不一樣。
String path = "C:\\Users\\admin\\Desktop\\test"
(Windows系統的安裝的JDK)
2、知識補習班
代碼很簡單,小編就不再去講解。不過,不要小看上面短短的代碼。這其中可涉及了很多知識點!
知識點①:在java中,無論是文件還是目錄。都統一採用File類來表示。
相信大多數人的電腦裝的都是Windows系統,在Windows電腦上我們經常會新建一些 文件夾,然後在文件夾中放置某種格式的文件。例如後綴爲 .txt、.zip的文件等,這些後綴是文件的格式。
然而,在Java中,java會把我們日常所說的文件夾,稱爲:目錄(英文是:directory)。帶有後綴格式的文件,才稱之爲:文件(file)。
大家以後一定要習慣目錄和文件的叫法。對以後的學習是很有好處的。
那麼,Java中又是用哪些類去描述目錄和文件這兩種東西呢?
然而,java開發團隊也比較懶,它不去區分這玩意是文件,還是目錄。直接就只用一個File類來表示。
那麼問題來了?當我們由路徑 new出了一個File的實例(也叫對象)的時候,這個實例到底代表的是文件呢?還是目錄呢?這時就要用到實例de兩個方法了——file.isFile()或file.isDirectory()。再詳細的話,大家可以自行去查File類。
知識點②:在程序代碼中,當我們用字符串生成一個File類的對象時,java虛擬機只是負責去生成這個對象,它並關心電腦上是否存在該目錄或者文件。
也就是說,當程序執行到new File(path)代碼的時候,Java虛擬機只負責生成file對象的,至於這個對象代表的是目錄還是文件,它是不管的。同時,字符串中所描述的目錄或者文件是否存在,它也不管。(小編只能說,ni niu bi !)
剛開始學File類的時候,小編一直在擔心,當我們提供了一個String 類型的路徑,然而電腦上卻沒有這個目錄或者文件,我們能不能去new這個對象呢?
比如:上面的代碼中,聲明瞭一個字符串的路徑,
String path = "C:\\Users\\admin\\Desktop\\test"
。它所描述的意思是:C盤下,經過一堆目後的test文件或目錄。
那麼當我們使用new File(path)語句來new一個對象的時候,假如這個test不存在,會不會影響file實例的生成呢?答案是不會。可能這個是我學習文件操作的一個誤區吧!其實大家可以換一個方式思考這麼個問題:上層的java程序是怎麼去告訴Windows系統,它要去創建一個文件或者目錄的呢?也就是一個文件或者目錄,它是怎麼能在底層中,從無到有呢?。
另外,提醒一下:我們的程序是一堆死的指令。是誰在按照我們寫的程序在工作呢?
知識點③:操作系統不同,String路徑寫法也會不同。這是因爲不同的操作系統,它們所使用的的路徑分隔符和目錄分隔符是不一樣的。
Windows系統中,路徑分隔符用的是冒號“ :” 。目錄分隔符用的是 反斜槓 “\” 。那爲什麼我們上面寫的路徑中會有兩個反斜槓呢? 這是因爲另一個是轉義字符。
具體什麼是轉義字符,爲什麼要用轉義字符。這又得大家自己去了解了。最後,思考一下這個問題:Java是怎麼實現跨平臺的?
提示一下:不同的操作系統,Java開發團隊提供的JDK和Jre是不同的。這也就是Java程序能夠跨平臺的原因。
打完,收工!
參考鏈接:http://www.cnblogs.com/eczhou/archive/2012/01/16/2323431.html