FilenameFilter

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值