这应该很简单。如果我有一个像这样的字符串:
../Test?/sample*.txt
那么获取与此模式匹配的文件列表的普遍接受的方法是什么? (例如,它应该匹配 ../Test1/sample22b.txt
和 ../Test4/sample-spiffy.txt
但不匹配 ../Test3/sample2.等等
或../Test44/sample2.txt
)
我查看了org.apache.commons.io.filefilter.WildcardFileFilter
它似乎是正确的野兽,但我不确定如何使用它来查找相对目录路径中的文件。
我想我可以查找 ant 的源代码,因为它使用通配符语法,但我一定在这里遗漏了一些非常明显的东西。
(编辑:上面的例子只是一个示例案例。我正在寻找在运行时解析包含通配符的通用路径的方法。我根据mmyers的建议弄清楚了如何做到这一点但这有点烦人。更不用说 java JRE 似乎会从单个参数自动解析 main(String[] 参数) 中的简单通配符,以“节省”我的时间和麻烦...我很高兴我混合中没有非文件参数。)
最佳答案
尝试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 .
关于java - 如何在Java中查找与通配符字符串匹配的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56869895/