微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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目录输出来,
然后把正则表达式输出
最后输出找到得文件

原文地址:https://www.jb51.cc/regex/359159.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐