【问题标题】:DirectoryStream with groovy带有 groovy 的 DirectoryStream
【发布时间】:2017-04-18 23:00:30
【问题描述】:

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

此外,如果搜索模式是 **/*.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*/
                            }       
                        }
                    }

【问题讨论】:

  • 你能展示你不工作的代码吗?
  • @tim_yates 我已经用我无法工作的 try-with-resources 更新了这个问题。基本上我们正在对上周修改的匹配模式的文件进行操作

标签: java groovy nio


【解决方案1】:

以下是你想要的(我认为)

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

正如你所说,它不会递归到目录中

【讨论】:

  • 对,但是如果文件模式需要,我该如何通过目录边界呢?或者这应该是一个单独的问题?
  • 你可以使用 AntBuilder 吗? stackoverflow.com/questions/17206150/…new AntBuilder().fileScanner { fileset(dir:dir) { include(name:'**/*.txt') } }.each { println it }
  • 我实际上是想摆脱 AntBuilder。我想使用 nio Paths,因为当我进行单元测试时,我可以交换内存中的文件系统。我认为 AntBuilder 不可能。我想要的可能没有“简单”的解决方案。
  • Eclipse 的 groovy 很糟糕……打赌它可以工作,但 IDE 强调它
  • 不错!只是想建议 Files.walk
猜你喜欢
  • 1970-01-01
  • 2021-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-19
相关资源
最近更新 更多