微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

正则表达式 – 如何打破常规’eachFileMatch()’

我有一个工作脚本,列出目录中的所有pdf文件.它按预期工作,但我需要的只是第一个pdf文件文件名.然后我想打破eachFilematch(),因为目录中可能有数千个pdf文件.

我尝试在eachFilematch()之后使用find这个Break from groovy each closure的答案.找到但是没有工作Caught:groovy.lang.MissingMethodException:没有方法签名:java.io.File.eachFilematch()适用于参数类型:(java .util.regex.Pattern)值:[.*.(?i)pdf]

def directory="c:\\tmp"   // place 2 or more pdf files in that
                                  // directory and run the script
        def p =  ~/.*.(?i)pdf/
        new File( directory ).eachFileMatch(p) { pdf ->
                println pdf // and break
        }

谁能让我知道怎么做?

解决方法

你不能突破这些每个{}方法(异常会起作用,但那会很脏).如果你检查eachFileMatch的代码,你会看到它已经读取了整个列表()并迭代它.所以这里的一个选择是只使用常规JDK方法并使用find返回第一个

// only deal with filenames as string
println new File('/tmp').list().find{it=~/.tmp$/}

// work with `File` objects
println new File('/tmp').listFiles().find{it.isFile() && it=~/.tmp$/}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐