加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 05:58:40 所属栏目:百科 来源:网络整理
导读:我有一个工作脚本,列出目录中的所有pdf文件.它按预期工作,但我需要的只是第一个pdf文件的文件名.然后我想打破eachFileMatch(),因为目录中可能有数千个pdf文件. 我尝试在eachFileMatch()之后使用find这个Break from groovy each closure的答案.找到但是没有工
我有一个工作脚本,列出目录中的所有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$/}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读