java提供了File類來供咱們操做文件,FIle是文件或文件夾的抽象表示,也就是對象表示。總結了幾個經常使用的方法java
listFiles()函數返回文件的對象列表,而有時候咱們只須要其中特定的文件,好比說.txt文件,而其他的不用返回,雖然能夠在返回後再操做該數組,但這樣有點太複雜了,java給咱們提供了倆個接口FilenameFilter和FileFilter,將此接口對象傳入到listFiles的參數中,以達到過濾的目的。接口中的accept就是過濾函數,分別對得到的每個文件調用此方法,若返回true,則放入到數組中,反之移除數組
FilenameFilter過濾器,咱們只能使用文件或者目錄的名字,dir參數是文件所在的目前對象,並非文件的FIle對象,全部咱們通常只是使用name參數ide
public interface FilenameFilter { boolean accept(File dir, String name); }
FileFilter過濾器,參數pathname便是文件的FIle對象,經過它咱們能夠得到文件的一切屬性,好比說pathname.getName()就是文件的名字啦,能夠變成間接的FIlenameFilter。功能強大函數
public interface FileFilter { boolean accept(File pathname); }
import java.io.File; import java.io.FileFilter; import java.io.FilenameFilter; /** * 自定義的局部內部類來自定義過濾器類, */ public class Generics { //自定義過濾器類實現FilenameFilter接口 static class MyFilenameFilter implements FilenameFilter{ @Override public boolean accept(File dir, String name) { return name.endsWith(".java");//只獲取.java結尾的文件或目錄 } } //自定義過濾器類實現FileFilter接口 static class MyFileFilter implements FileFilter{ @Override public boolean accept(File pathname) { return pathname.getName().endsWith(".java");//只獲取.java結尾的文件或目錄 } } public static void main(String[] args) { File file =new File("D:"); //方式一:FileFilter過濾器 File[] files=file.listFiles(new MyFileFilter()); for (File f:files){ System.out.println(f.getName()); } //方式二:FilenameFilter過濾器 File[] files2=file.listFiles(new MyFilenameFilter()); for (File f:files2){ System.out.println(f.getName()); } //list()函數只能接受FilenameFilter對象,匿名內部類的形式實現, //或者能夠理解爲爲何既然有FileFilter,而還要FilenameFilter // 1.對於listFiles來講,FilenameFilter能夠直接操做name,而不須要經過File對象獲取 // 2.對於list來講,它只能是FilenameFilter過濾器,由於獲得的是String,已經不是File了 String[] filenames = file.list(new FilenameFilter() { @Override public boolean accept(File dir, String name) { return name.endsWith(".java"); } }); for(String str:filenames){ System.out.println(str); } } }