File 類基礎解析3 檔案過濾器優化
阿新 • • 發佈:2020-07-16
File類基礎解析3 檔案過濾器優化
什麼是檔案過濾器?
java.io.FileFilter 是一個介面,是File的過濾器。 該介面的物件可以傳遞給File類的 listFiles(FileFilter) 作為引數, 介面中只有一個方法
boolean accept(File pathname) :測試pathname是否應該包含在當前File目錄中,符合則返回true
簡單的分析
- 介面作為引數,需要傳遞子類物件,重寫其中方法。我們選擇匿名內部類方式,比較簡單。
- accept 方法,引數為File,表示當前File下所有的子檔案和子目錄。保留住則返回true,過濾掉則返回 false。保留規則:
1. 要麼是.java檔案。
2. 要麼是目錄,用於繼續遍歷。 - 通過過濾器的作用, listFiles(FileFilter) 返回的陣列元素中,子檔案物件都是符合條件的,可以直接列印
package File; import java.io.File; import java.io.FileFilter; public class Main { public static void main(String[] args) { //要遍歷的資料夾的根目錄 String rootpath="D:\\test"; File file = new File(rootpath); printDir(file); } public static void printDir(File dir){ File[] files = dir.listFiles(new FileFilter() { @Override public boolean accept(File pathname) { return pathname.getName().endsWith(".png")||pathname.isDirectory(); } }); for (File file : files) { if (file.isDirectory()){ printDir(file); } else{ System.out.println("檔案絕對路徑:"+file.getAbsolutePath()); } } } }
Lambda表示式簡化
package File; import java.io.File; public class Main { public static void main(String[] args) { //要遍歷的資料夾的根目錄 String rootpath="D:\\test"; File file = new File(rootpath); printDir(file); } public static void printDir(File dir){ File[] files = dir.listFiles(pathname -> { return pathname.getName().endsWith(".png") ||pathname.isDirectory();}); for (File file : files) { if (file.isDirectory()){ printDir(file); } else{ System.out.println("檔案絕對路徑:"+file.getAbsolutePath()); } } } }
以上就是過濾器的一些基礎知識,如有錯誤請各位批評指正,喜歡我的文章可以點個贊收藏,