Java檔案IO學習筆記(五)-刪除資料夾和檔案
阿新 • • 發佈:2019-01-27
本例項介紹如何驗證傳入路徑是否正確、如何刪除系統上的檔案或資料夾,包括刪除資料夾下的所有檔案。
刪除檔案與資料夾的技術要點如下:
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()方法進行遍歷,直到找到資料夾下的檔案並將其刪除。最後將沒有檔案和檔案的空目錄刪除。