Java通配符扩展

时间:2011-03-07 06:56:06

标签: java apache-commons-io

我需要在文件路径中展开通配符,以获取与文件路径匹配的文件列表 我在apache中使用了commons-io:

protected File[] wildcardResolution(File f) {
    File dir = f.getParentFile();
    FileFilter fileFilter = new WildcardFileFilter(f.getName());
    return dir.listFiles(fileFilter);
}

问题是它只扩展了*?通配符,但不扩展**通配符,因此: /usr/**/*.xml与all files with extension .xml, in any subfolder of /usr不匹配。

如何让**通配符扩展正常工作?

感谢

1 个答案:

答案 0 :(得分:4)

File.listFiles的问题在于它没有递归列出。

您可以使用FileUtils.iterateFiles or listFiles。其中一个模式用于文件,一个模式用于目录。这与一个globbing表达式不完全相同:

Iterator iterateFiles = FileUtils.iterateFiles(
  new File("."), new WildcardFileFilter("*.xml"), TrueFileFilter.INSTANCE);
while(iterateFiles.hasNext()){
    System.out.println(iterateFiles.next());
}