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); } } }