Java库返回glob或Antlike模式“*foo/***/.txt”的列表<File>?
我正在寻找一个库,它将提供一个方法,该方法将为我提供一个文件列表,匹配给定的Ant-like模式
对于*foo/**/*.txt
我会
foo/x.txt
foo/bar/baz/.txt
myfoo/baz/boo/bar.txt
等等,我知道用迪沃克和
PathMatcher mat = FileSystems.getDefault().getPathMatcher("glob:" + filesPattern);
,但我更喜欢一些。我以为Commons IO会有,但没有
更新:我很乐意重用Ant的代码,但我更喜欢比整个Ant更小的代码
# 1 楼答案
从Java7开始,有一个递归的目录扫描。Java8可以在语法上有所改进
我们需要一个glob匹配类,最好是在目录级别,以便跳过目录
那么步行就是:
}
# 2 楼答案
因此,为了提高速度,我牺牲了几MB的应用程序大小,并最终使用了Ant's ^{}
还有春天的PathMatchingResourcePatternResolver
这是我开始编写的impl,没有完成,只是如果有人想完成它。其想法是,它将保留一个模式堆栈,遍历dir树,并将内容与实际堆栈深度以及
**
情况下的剩余内容进行比较但我求助于
PathMatcher
,然后求助于Ant的impl# 3 楼答案
Google Guava有一个用于文件的TreeTraverser,它允许您对目录中的文件进行深度优先和广度优先枚举。然后,您可以根据文件名的正则表达式或需要执行的任何操作过滤结果
以下是一个例子(需要番石榴):
番石榴可以让你用Iterables过滤任何谓词。过滤器,所以如果不想使用模式,就不必使用模式