1. 程式人生 > >Java檔案IO學習筆記(五)-刪除資料夾和檔案

Java檔案IO學習筆記(五)-刪除資料夾和檔案

本例項介紹如何驗證傳入路徑是否正確、如何刪除系統上的檔案或資料夾,包括刪除資料夾下的所有檔案。
刪除檔案與資料夾的技術要點如下:
1.File的delete()方法刪除檔案或資料夾。
2.當File指向一個資料夾時,必須保證資料夾下面的子檔案或子目錄為空,才能用delete()方法將這個資料夾刪除。

package core;

import java.io.File;

/**
 * 刪除資料夾和檔案
 */
public class TextDeleteFileAndDir {
    boolean flag = false;
    File file;

    public
boolean deleteFile(String filePath) {// 刪除單個檔案 flag = false; file = new File(filePath); if (file.exists() && file.isFile()) { file.delete();// 檔案刪除 flag = true; } return true; } // 根據路徑刪除指定目錄或檔案,無論存在與否 public boolean DeleteFolder
(String deletePath) { flag = false; file = new File(deletePath); if (!file.exists()) { return flag; } else { if (file.isFile()) { // 判斷是否為檔案 return deleteFile(deletePath); // 是檔案時呼叫刪除檔案方法 } else { return deleteDirectory(deletePath);// 目錄時呼叫刪除目錄的方法
} } } // 刪除目錄(資料夾)以及目錄下的檔案 public boolean deleteDirectory(String dirPath) { // 如果dirPath不以檔案分隔符結尾,自動新增檔案分隔符 if (!dirPath.endsWith(File.separator)) { dirPath += File.separator; } File dirFile = new File(dirPath); if (!dirFile.exists() || !dirFile.isDirectory()) { return false; } flag = true; // 下面該句程式碼是程式的核心:獲得傳入路徑下的所有檔案 File[] files = dirFile.listFiles();// 獲得傳入路徑下的所有檔案 // 遍歷刪除資料夾下的所有檔案(包括子目錄) for (int i = 0; i < files.length; i++) { if (files[i].isFile()) {// 刪除子檔案 flag = deleteFile(files[i].getAbsolutePath()); System.out.println(files[i].getAbsolutePath() + " 刪除成功"); if (!flag) break; // 如果刪除失敗則跳出 } else {// 運用遞迴,刪除子目錄 flag = deleteDirectory(files[i].getAbsolutePath()); if (!flag) break;// 如果刪除失敗則跳出 } } if (!flag) return false; if (dirFile.delete()) { // 刪除當前目錄 return true; } else { return false; } } public static void main(String[] args) { TextDeleteFileAndDir td = new TextDeleteFileAndDir();// 建立物件例項 System.out.println("1.刪除單個檔案:"); String filePath = "/Users/**/test/createFile/temp5070901157696642707.txt";// 單個檔案 **也是一層目錄 boolean result = td.deleteFile(filePath); if (result) { System.out.println(filePath + "檔案刪除成功?" + result); } System.out.println("2.刪除目錄以及目錄下的檔案:"); String path = "/Users/**/test/createFile"; // 宣告目錄路徑 **也是一層目錄 result = td.DeleteFolder(path);// 刪除目錄路徑 System.out.println("全部刪除成功? " + result); } }

這裡寫圖片描述
源程式解讀
(1)deleteFolder()方法中,如果路徑指向單個檔案,則呼叫deleteFile()方法刪除檔案;如果路徑指向目錄,則呼叫刪除目錄方法deleteDirectory()刪除目錄。
(2)deleteFile()方法刪除單個檔案。直接呼叫File物件delete方法,能夠刪除指定路徑下的檔案。
(3)deleteDirectory()方法刪除指定目錄,包括該目錄下的檔案和目錄。方法首先判斷目錄是否是以檔案分隔符結尾,將傳入目錄下的所有檔案集中。迴圈顯示檔案集下的檔案和資料夾。如果是檔案,則直接刪除其絕對路徑;如果是資料夾,則運用遞迴的方法呼叫deleteDirectory()方法進行遍歷,直到找到資料夾下的檔案並將其刪除。最後將沒有檔案和檔案的空目錄刪除。