FilenameFile接口主要用于过滤文件名,当我们调用list()方法时可以获得File对象的全部列表,但是当我们想要获得不同的目录列表时就需要使用这个接口去实现,例如我们想要获得全部为.java的文件,那么我们就需要使用目录过滤器来获得符合条件的文件。
两种不同的获取文件的方法
package IO;
import java.io.*;
import java.util.regex.Pattern;
class FileAccept1 implements FilenameFilter{
//第一种方式
//根据文件的后缀名进行匹配得到相应的文件
private String extendName;
//第二种方式
//使用正则表达式进行匹配,匹配成功的就是想要获得的文件
private Pattern pattern;
//输入自己想要的文件匹配格式
public void setPattern(String regex){
pattern = Pattern.compile(regex);
}
//输入自己想要获取的文件的后缀名
public void setExtendName(String s){
extendName = s;
}
//实现FilenameFile接口中的唯一方法
public boolean accept(File dir,String name){
//第一种方式根据正则匹配返回值
// return pattern.matcher(name).matches();
//第二种根据后缀名匹配返回
return name.endsWith(extendName);
}
}
public class Demo8 {
public static void main(String[] args) {
//File(String directoryPath,String filename)directoryPath为文件的路径,dir为一个目录.
File dirFile = new File("D:\\WeChat");
FileAccept1 fileAccept = new FileAccept1();
fileAccept.setExtendName(".exe");
fileAccept.setPattern("courgette.exe");
File[] listFile = dirFile.listFiles(fileAccept);
for(File name:listFile){
System.out.println(name);
}
}
}
这个接口使用内部类进行改写可以节省代码量
public class Demo3 {
public static void main(String[] args) {
File path = new File("D:\\IDEA\\Practice\\src\\IO");
String[] list;
if(args.length==0){
list = path.list();
}
else{
list = path.list(new FilenameFilter() {
Pattern pattern = Pattern.compile(args[0]);
public boolean accept(File dir, String name) {
return pattern.matcher(name).matches();
}
});
}
Arrays.sort(list,String.CASE_INSENSITIVE_ORDER);
for(String dirItem: list){
System.out.println(dirItem);
}
}
}
也可以将这两种方法做到同一个类中,想要使用时直接可以使用。
class SortedDirList{
String[] list;
File file;
SortedDirList(String filePath){
File file = new File(filePath);
list = file.list();
if (list != null) {
Arrays.sort(list,String.CASE_INSENSITIVE_ORDER);
}
}
public String[] getList(){
return list;
}
public String[] getList(String regex){
list = file.list(new FilenameFilter() {
Pattern pattern = Pattern.compile(regex);
public boolean accept(File dir, String name) {
return pattern.matcher(name).matches();
}
});
return list;
}
}