正则表达式 – 如何打破常规’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$/} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |