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

新手上路,请多包涵

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

 ../Test?/sample*.txt

那么获取与此模式匹配的文件列表的普遍接受的方法是什么? (例如,它应该匹配 ../Test1/sample22b.txt ../Test3/sample2.blah ../Test44/sample2.txt ../Test4/sample-spiffy.txt

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

我想我可以查看 ant 的源代码,因为它使用通配符语法,但我必须在这里遗漏一些非常明显的东西。

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

原文由 Jason S 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 641
2 个回答

考虑 Apache Ant 的 DirectoryScanner:

 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)。

原文由 Misha 发布,翻译遵循 CC BY-SA 2.5 许可协议

Apache commons-io 尝试 FileUtilslistFilesiterateFiles 方法):

 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

原文由 Vladimir 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题