我需要扩展文件路径中的通配符以获取与文件路径匹配的文件列表。
我使用了 apache 的 commons-io:
protected File[] wildcardResolution(File f) {
File dir = f.getParentFile();
FileFilter fileFilter = new WildcardFileFilter(f.getName());
return dir.listFiles(fileFilter);
}
问题是它只扩展 *
或 ?
通配符而不是 **
通配符,所以:
/usr/**/*.xml 不匹配 /usr 的任何子文件夹中扩展名为 .xml 的所有文件
。
如何让 **
通配符扩展正常工作?
谢谢
最佳答案
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());
}
关于Java通配符扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5216732/