我有一个glob,可能看起来像* .txt,在这种情况下我想在当前目录中搜索文本文件。或者它可能看起来像** / * .txt,在这种情况下我想走文件树来查找文件。
当传入* .txt时,DirectoryStream会执行我想要的操作,而当我有** / * .txt时,Files.walk会工作。在Java 8中是否有一种基于我的glob(或者更确切地说,我的PathMatcher)工作的方法?
答案 0 :(得分:0)
这是我想出来的,要么根据模式遍历目录,要么根据模式(注意这段代码使用groovy,但与纯java 8解决方案没有太大区别)
Path src = filesystem.getPath(job.srcDir)
int numSubDirs = job.pattern.contains("**") ? Integer.MAX_VALUE : 1
Files.walk(src, numSubDirs)
.filter{Path path -> filesystem.getPathMatcher("glob:${job.pattern}").matches(path.getFileName())}
.filter{Path path -> job.days ? (new Date()) - new Date(path.toFile().lastModified()) <= job.days : true}
.each{ Path path ->
actions[job.action](job, path)
fileCount++
}