更新時間:2022-10-11 來源:黑馬程序員 瀏覽量:
File類的list()方法用于遍歷指定目錄下的所有文件。下面通過一個案例來演示如何使用list()方法遍歷目錄文件,如文件7-4所示。
import java.io.File; public class Example03{ public static void main(String[] args)throws Exception { // 創建File對象 File file = new File("D:/IdeaWorkspace/chapter07"); if(file.isDirectory()) { // 判斷File對象對應的目錄是否存在 String[] names = file.list(); // 獲得目錄下的所有文件的文件名 for (String name : names) { System.out.println (name); //輸出文件名 } } } }
文件7-4 Example03.java
文件7-4的運行結果如圖7-6所示。
在文件7-4中,第5行代碼創建了一個File對象,并指定了一個路徑,通過調用File的isDirectory()方法判斷路徑指向的是否為存在的目錄,如果存在就調用list()方法,獲得一個String類型的數組names,數組中包含這個目錄下所有文件的文件名。接著通過循環遍歷數組names,依次打印出每個文件的文件名。
文件7-4實現了遍歷一個目錄下所有文件的功能,然而有時程序只是需要得到指定類型的文件,如獲取指定目錄下所有的“.java”文件。針對這種需求,File類中提供了一個重載的list(FilenameFilter filter)方法,該方法接收一個FilenameFilter類型的參數。FilenameFilter是一個接口,稱為文件過濾器,當中定義了一個抽象方法accept(File dir,String name)。在調用list()方法時,需要實現文件過濾器FilenameFilter,并在accept()方法中做出判斷,從而獲得指定類型的文件。
為了讓初學者更好地理解文件過濾的原理,接下來分步驟分析list(FilenameFilter filter)方法的工作原理。
(1)調用list()方法傳入FilenameFilter文件過濾器對象。
(2)取出當前File對象所代表目錄下的所有子目錄和文件。
(3)對于每一個子目錄或文件,都會調用文件過濾器對象的accept(File dir,String name)方法,并把代表當前目錄的File對象以及這個子目錄或文件的名字作為參數dir和name傳遞給方法。
(4)如果accept()方法返回true,就將當前遍歷的這個子目錄或文件添加到數組中,如果返回false,則不添加。
圖7-6 文件7-4的運行結果