Java应用中用正则表达式筛选ABC/XYZ开头的CSV文件问题
Java读取指定前缀CSV文件的解决方案
问题分析
你之前使用的正则表达式存在语法错误,多余的")字符导致匹配失效,且Java环境下的文件匹配可以用更简便的原生API实现,无需复杂正则。
解决方案
1. 修正后的正则表达式
正确的正则应为:^(ABC|XYZ).*\.csv$
^匹配文件名开头(ABC|XYZ)匹配以ABC或XYZ开头的前缀.*匹配任意长度的中间字符\.csv$匹配以.csv结尾的后缀
Java中使用正则匹配文件名的示例代码:
import java.util.regex.Pattern; public class FileRegexMatcher { public static void main(String[] args) { String filenameRegex = "^(ABC|XYZ).*\\.csv$"; Pattern pattern = Pattern.compile(filenameRegex); // 测试示例文件名 String[] testFiles = {"ABC_sales.csv", "XYZ_2024.csv", "normal.csv", "ABC.docx"}; for (String file : testFiles) { if (pattern.matcher(file).matches()) { System.out.println("匹配文件:" + file); } } } }
2. 更简便的Java原生文件过滤方式
直接使用FilenameFilter或Stream API过滤,无需正则,代码更直观:
import java.io.File; import java.io.FilenameFilter; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.stream.Stream; public class CsvFileFilter { public static void main(String[] args) { String targetDir = "你的目标目录路径"; // 方式1:使用FilenameFilter File dir = new File(targetDir); File[] matchedFiles = dir.listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) { return (name.startsWith("ABC") || name.startsWith("XYZ")) && name.endsWith(".csv"); } }); if (matchedFiles != null) { for (File file : matchedFiles) { System.out.println("找到匹配文件:" + file.getName()); } } // 方式2:Java 8+ Stream API try (Stream<Path> pathStream = Files.list(Paths.get(targetDir))) { pathStream.filter(Files::isRegularFile) .map(Path::getFileName) .map(Path::toString) .filter(name -> (name.startsWith("ABC") || name.startsWith("XYZ")) && name.endsWith(".csv")) .forEach(name -> System.out.println("找到匹配文件:" + name)); } catch (Exception e) { e.printStackTrace(); } } }
注意事项
- 替换代码中的
你的目标目录路径为实际目录路径 - 若文件名存在大小写差异,可添加
toLowerCase()统一处理,比如name.toLowerCase().startsWith("abc")
内容的提问来源于stack exchange,提问作者GettingStarted With123
相关产品推荐
相关产品推荐

