用正则表达式匹配目录下的文件

前端之家收集整理的这篇文章主要介绍了用正则表达式匹配目录下的文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

用正则表达式匹配目录下的文件,可以更快速的查找到所需要的文件

package file.service;

import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.Arrays;
import java.util.regex.Pattern;

public class FileClassFuction {

    public FileClassFuction() {
        // TODO Auto-generated constructor stub
    }
//定义一个内部类,实现FilenameFilter接口,这是一个文件过滤器接口
//用于传递给list方法,对dir目录下的文件过滤用的
//list方法对每个文件回调accept方法判定dir目录下的name文件是否满
//足我的用regex编译的pattern模式。如果满足返回true。将这个文件
//入到list方法的返回string列表中。
    public static FilenameFilter filter(final String regex) {

        return new FilenameFilter() {
            private Pattern pattern = Pattern.compile(regex);

            @Override
            public boolean accept(File dir,String name) {
                return pattern.matcher(name).matches();
            }
        };
    }

    public static void main(String[] args) throws IOException {
        // 获取工程classpath目录当做基目录,依据这个基地址获取到其他地址
        String basePath = FileClassFuction.class.getResource("/").getFile();
        File file = new File(basePath,"../src/file/service/").getCanonicalFile();
        System.out.println(file.getCanonicalPath() + file.getName());
        String[] list;
        // 如果命令行参数没有,直接输出file下的文件和目录名出来
        if (args.length == 0) {
            list = file.list();
        } else {
            // 如果命令行参数给定一个正则表达式,那么用带参数的list方法会将file的文件
            // 和目录用正则表达式匹配,只输出匹配的文件和目录名
            // 这是我输入的正则表达式 表示该file目录下所有的java源文件 ".*\.java"
            System.out.println(args[0]);
            System.out.println(Pattern.compile(args[0]).toString());
            list = file.list(filter(args[0]));
        }

        Arrays.sort(list,String.CASE_INSENSITIVE_ORDER);
        for (String string : list) {
            System.out.println(string);
        }
    }

}

输出结果

先把我要寻找的file目录输出来,
然后把正则表达式输出
最后输出找到得文件

猜你在找的正则表达式相关文章