一.listFiles
在File類中有兩個和ListFiles重載的方法,方法的參數傳遞的就是過濾器
第一種
File[] listFiles(FileFilter filter)
java.io.FileFilter接口:用於抽象路徑名(File對象)的過濾器,
作用:用來過濾文件的方法
抽象方法:
boolean accept(File pathname)測試指定抽象路徑名是否包含再某個路徑名列表中
參數:
File pathname:使用ListFiles方法遍歷目錄,得到的每一個文件對象
第二種
File[] listFiles(FilenameFilter filter)實現此接口的類實例可用於過濾文件名
java.io.FilenameFilter接口:文件名過濾器
作用:用於過濾文件名稱
抽象方法:
boolean accept(File dir,String name)測試指定文件是否包含在某一文件列表中
參數:
File dir:構造方法中傳遞的被遍歷的目錄
String name:遍歷目錄獲取的每一個文件/文件夾的名稱
注意事項
兩個過濾器接口是沒有實現類的,需要我們自己寫實現類,重寫過濾的方法accept,
在方法中自定義過濾的規則
二.案例
2.1 普通版
public static void main(String[] args) {
File file = new File("G:\\");
getAllFile(file);
}
/**
* 定義一個方法,對目錄進行遍歷
* @param dir File類型的目錄
*/
public static void getAllFile(File dir){
File[] files = dir.listFiles(new FileFilterImpl());//傳遞過濾器對象
for (File f : files) {
if (f.isDirectory()){//是文件夾繼續遍歷
getAllFile(f);
}else {//不是文件夾則輸出
System.out.println(f);
}
}
}
/**
* 創建過濾器FileFilter的實現類,重寫accept
*/
public class FileFilterImpl implements FileFilter {
@Override
public boolean accept(File pathname) {
//如果是文件夾,繼續遍歷
if (pathname.isDirectory()){
return true;
}
return pathname.getName().toLowerCase().endsWith(".java");
}
}
2.2 升級版
public static void main(String[] args) {
File file = new File("G:\\");
getAllFile(file);
}
/**
* 定義一個方法,對目錄進行遍歷
*
* @param dir File類型的目錄
*/
public static void getAllFile(File dir) {
// File[] files = dir.listFiles(new FileFilterImpl() {
// @Override
// public boolean accept(File pathname) {
// //如果是文件夾,繼續遍歷
// if (pathname.isDirectory()){
// return true;
// }
// return pathname.getName().toLowerCase().endsWith(".java");
// }
// }
// );//傳遞過濾器對象
//
dir.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return new File(dir,name).isDirectory()||name.toLowerCase().endsWith(".java");
}
});
for (File f : files) {
if (f.isDirectory()) {//是文件夾繼續遍歷
getAllFile(f);
} else {//不是文件夾則輸出
System.out.println(f);
}
}
}
2.3 lambda表達式(接口中只有一個抽象方法)
三.原理
