java刪除帶文件的目錄

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章