Java通配符扩展

发布于 2024-10-20 12:24:21 字数 502 浏览 3 评论 0原文

我需要扩展文件路径中的通配符以获取与文件路径匹配的文件列表。
我使用了 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 的文件不匹配

我怎样才能让**通配符扩展正常工作?

谢谢

I need to expand wildcards in a filepath to get a list of files that match the filepath.
I used commons-io from apache:

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

The problem is that it expands only * or ? wildcards but not ** wildcards, so:
/usr/**/*.xml doesn't match all files with extension .xml, in any subfolder of /usr.

How can i get ** wildcard expansion to work properly?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

十六岁半 2024-10-27 12:24:21

的问题File.listFiles 的特点是它不递归列出。

您可以使用 FileUtils.iterateFiles 或 listFiles。它对文件使用一种模式,对目录使用一种模式。这与一个通配符表达式并不完全相同:

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

The problem with File.listFiles is that it does not list recursively.

You can use FileUtils.iterateFiles or listFiles. Which uses one pattern for the files and one pattern for the directories. Which is not exactly the same as one globbing expression:

Iterator iterateFiles = FileUtils.iterateFiles(
  new File("."), new WildcardFileFilter("*.xml"), TrueFileFilter.INSTANCE);
while(iterateFiles.hasNext()){
    System.out.println(iterateFiles.next());
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文