34 java 文件过滤 FileFilter

package com.da.tool.util;

import org.apache.commons.io.filefilter.RegexFileFilter;

import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;

/**
 * java 的 FileFilter和FilenameFilter测试使用
 */
public class FileFilterExample {

    /**
     * 通过文件后缀过滤文件(仅查询后缀)
     * 功能可扩展点
     * 1、可针对文件、目录进行按照类型进行查找,实现特有的逻辑
     * 2、可根据此功能抽象一个借口,采用不同实现,进行不同场景的文件过滤
     * 3、对于复杂场景的文件过滤
     * 4、nameSuffix可定义为多个
     */
    static class FileFilterByNameSuffix implements FileFilter{

        private String nameSuffix;

        public FileFilterByNameSuffix(String nameSuffix) {
            this.nameSuffix = nameSuffix;
        }

        @Override
        public boolean accept(File file) {

            Boolean accept = false;

            if(file.getName().endsWith(nameSuffix)){
                accept = true;
            }
            return accept;
        }
    }

    /**
     * 通过文件后缀过滤文件
     */
   static class FileNameFilterByNameSuffix implements  FilenameFilter{
        private String nameSuffix;

        public FileNameFilterByNameSuffix(String nameSuffix) {
            this.nameSuffix = nameSuffix;
        }

        @Override
        public boolean accept(File dir, String name) {
            return name.endsWith(nameSuffix);
        }
    }


    public static void main(String[] args) {

        String path ="D:\\project\\da-tool\\src\\main\\java\\com\\da\\tool\\util";

        File file = new File(path);
        //1、实现FileFilter
        File [] files =file.listFiles(new FileFilterByNameSuffix(".java"));
        for (File file1 : files) {
            System.out.println(file1.getPath());
        }
        //2、实现FilenameFilter
        files =file.listFiles(new FileNameFilterByNameSuffix(".java"));
        for (File file1 : files) {
            System.out.println(file1.getPath());
        }
        //3、java提供正则过滤
        files =file.listFiles((FileFilter) new RegexFileFilter(".*.java"));
        for (File file1 : files) {
            System.out.println(file1.getPath());
        }
        //其他:PatternFilenameFilter   JarFilter

    }
}