gMa*_*ale 8 file-io groovy file
好的,这应该很容易......
我是groovy的新手,我正在寻求实现以下逻辑:
def testFiles = findAllTestFiles();
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经提出了下面的代码,它成功地打印了所有文件名.但是,我只需要将它们放入集合中,而不是打印.当然,我可以用旧的java方式做到这一点:只是实例化一个集合,添加所有元素并返回它.但是,那不会教我任何东西.
那么你如何以酷炫的"Groovy"方式做到这一点呢?
static File[] findAllTestFiles() {
def directory = new File("src/test/java");
def closure = {File f -> if(f.name =~ /Test\.java$/) println f }
directory.eachFileRecurse FileType.FILES, closure
return null;
}
Run Code Online (Sandbox Code Playgroud)
我希望在Groovy中使用尽可能少的代码实现findAlltestFiles(),同时仍然可读.
ata*_*lor 13
我会尽量避免完全建立这个系列.使用闭包,您可以分离逻辑以从您实际想要使用它们的文件中选择文件,如下所示:
import groovy.io.FileType
def withEachTestFile(Closure closure) {
new File("src/test/java").eachFileRecurse(FileType.FILES) {
if (it.name =~ /Test\.java$/) {
closure.call(it)
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,如果您想对测试文件执行某些操作,则可以直接执行此操作而无需在内存中构建列表:
withEachTestFile() { println it }
Run Code Online (Sandbox Code Playgroud)
或者如果你真的想要这个列表,你可以使用任何有意义的集合轻松生成它:
def files = []
withEachTestFile() { files << it }
Run Code Online (Sandbox Code Playgroud)
bti*_*nay 10
遍历支持多个闭包回调的目录的更新,标准和更通用的方法是traverse.
import static groovy.io.FileType.FILES
...
def files = []
new File("src/test/java").traverse(type: FILES, nameFilter: ~/Test\.java$/) {
files << it
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12366 次 |
| 最近记录: |