2017-04-17 50 views
0

我想使用java 8 DirectoryStream来查找匹配glob模式的文件,但我想在Groovy(至少2.4)中执行它。我很难找到一个如何去做的例子,因为groovy中不存在try-with-resources。DirectoryStream与groovy

此外,如果搜索模式是**/*。txt怎么办?该模式表示它应该跨越目录界限,但我对DirectoryStream的理解是它没有。

def recent = {File file -> new Date() - new Date(file.lastModified) < 7} 
    try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir, job.pattern)) { 
        for (Path entry : stream) { 
          if(recent){ 
           /*dostuff*/ 
          }  
         } 
        } 
+1

你能告诉你不工作的代码? –

+0

@tim_yates我更新了试用资源的问题,我无法工作。基本上我们正在使用上周修改的文件,其格式与 – Steve

回答

1

下你想要做什么(我觉得)

Files.newDirectoryStream(dir, { f -> f.fileName ==~ /.+\.txt/ }).withCloseable { stream -> 
    stream.each { 
     println it 
    } 
} 

正如你所说的,它不会递归下降到目录

+0

相匹配。但是,如果文件模式需要它,我该如何检查目录边界?或者应该是一个单独的问题? – Steve

+1

你可以使用AntBuilder? http://stackoverflow.com/questions/17206150/scan-directories-in-groovy-with-ant-builder-file-scanner'new AntBuilder()。fileScanner {fileset(dir:dir){include(name:'* */*。txt')}} .each {println it}' –

+0

我实际上试图摆脱AntBuilder。我想使用nio Paths,因为那时当我进行单元测试时,我可以交换内存中的文件系统。我不认为AntBuilder是可能的。这可能是因为我没有“简单”的解决方案。 – Steve