Java中基于正则表达式筛选指定目录下符合命名规则的子目录
解决方案
你可以通过自定义listFiles的目录过滤器实现筛选,有两种常用实现方式:
方式1:简单前缀匹配(满足当前需求,性能更高)
如果只需要筛选文件名以date=开头的目录,直接用字符串前缀判断即可,不需要正则:
import java.io.File; public class DirFilter { public static void main(String[] args) { String dir = "/test_directory/data/"; // 自定义过滤器:同时满足是目录 + 文件名前缀为date= File[] directories = new File(dir).listFiles(file -> file.isDirectory() && file.getName().startsWith("date=") ); // 加非空判断避免目录不存在/无权限时报空指针 if (directories != null) { for (File directory : directories) { System.out.println(directory.getAbsolutePath()); } } } }
方式2:正则匹配(适合需要严格校验日期格式的场景)
如果需要确保date=后面跟着的是yyyy-MM-dd格式的合法日期,可以用正则规则校验:
import java.io.File; import java.util.regex.Pattern; public class DirFilter { // 正则规则:date=开头,后面跟4位年-2位月-2位日格式 private static final Pattern DATE_DIR_PATTERN = Pattern.compile("^date=\\d{4}-\\d{2}-\\d{2}$"); public static void main(String[] args) { String dir = "/test_directory/data/"; File[] directories = new File(dir).listFiles(file -> file.isDirectory() && DATE_DIR_PATTERN.matcher(file.getName()).matches() ); if (directories != null) { for (File directory : directories) { System.out.println(directory.getAbsolutePath()); } } } }
两种方式输出的结果都符合你预期的筛选要求。
内容的提问来源于stack exchange,提问作者chin99
相关产品推荐
相关产品推荐

