一尘不染

如何在Java中找到与通配符字符串匹配的文件?

java

这应该非常简单。如果我有这样的字符串:

../Test?/sample*.txt

那么通常会采用什么方式来获取与此模式匹配的文件列表?(例如,它应该匹配../Test1/sample22b.txt,../Test4/sample-spiffy.txt但不匹配../Test3/sample2.blah或../Test44/sample2.txt)

我看了一下,org.apache.commons.io.filefilter.WildcardFileFilter看起来像是对的野兽,但是我不确定如何使用它在相对目录路径中查找文件。

我想我可以查找ant的源代码,因为它使用了通配符语法,但是我必须在这里遗漏一些显而易见的内容。

(编辑:上面的示例只是一个示例案例。我正在寻找一种在运行时解析包含通配符的常规路径的方法。我根据mmyers的建议弄清楚了如何做,但这很烦人。更不用说了Java JRE似乎可以从单个参数中自动解析main(String []参数)中的简单通配符,以“节省”我的时间和麻烦…我很高兴我没有在非文件参数中混合。)


阅读 761

收藏
2020-03-02

共2个答案

一尘不染

考虑来自Apache AntDirectoryScanner

DirectoryScanner scanner = new DirectoryScanner();
scanner.setIncludes(new String[]{"**/*.java"});
scanner.setBasedir("C:/Temp");
scanner.setCaseSensitive(false);
scanner.scan();
String[] files = scanner.getIncludedFiles();

你需要引用ant.jar(对于Ant 1.7.1约为1.3 MB)。

2020-03-02
一尘不染

FileUtils从Apache commons-io(listFiles和iterateFiles方法)尝试:

File dir = new File(“.”);
FileFilter fileFilter = new WildcardFileFilter(“sample*.java”);
File[] files = dir.listFiles(fileFilter);
for (int i = 0; i < files.length; i++) {
System.out.println(files[i]);
}
为了解决您的TestX文件夹问题,我将首先遍历文件夹列表:

File[] dirs = new File(“.”).listFiles(new WildcardFileFilter(“Test.java”);
for (int i=0; i<dirs.length; i++) {
File dir = dirs[i];
if (dir.isDirectory()) {
File[] files = dir.listFiles(new WildcardFileFilter(“sample
.java”));
}
}
相当“强力”解决方案,但应该可以正常工作。如果这不符合您的需求,则可以始终使用RegexFileFilter。

2020-03-02