我有一个在traverse上正常工作的闭包,但另一个同样失败了。我怀疑范围或时间导致失败。工作代码汇总了文件系统中文件的大小。代码不起作用是检查文件的内容,只打印一个匹配项。使用Grails 2.3.7运行这些
工作代码:
def groovySrcDir = new File('.', 'plugins/')
def countSmallFiles = 0
def postDirVisitor = {
if (countSmallFiles > 0) {
println "Found $countSmallFiles files with small filenames in ${it.name}"
}
countSmallFiles = 0
}
groovySrcDir.traverse(type: FILES, postDir: postDirVisitor, nameFilter: ~/.*\.groovy$/) {
if (it.name.size() < 15) {
countSmallFiles++
}
}
问题代码:
def datamap = [:]
def printDomainFound = {
//File currentFile = new File(it.canonicalPath)
def fileText = it.text
if(fileText.indexOf("@Table ") > 0){
//println "Found a Table annotation in ${it.name} "
datamap.put(it.name, it.name)
}
}
groovySrcDir.traverse type: FILES, visit: printDomainFound, nameFilter: filterGroovyFiles
datamap.each {
println it.key
}
答案 0 :(得分:0)
我测试了你的代码并且工作正常。
您期待哪种行为?
我发现了一些可疑的事情:
如果fileText
以"@Table "
开头,则indexOf
将返回0,并且不会满足条件if(fileText.indexOf("@Table ") > 0)
。
"@Table "
有一个尾随空格,然后不会打印包含例如:"@Table("
的文件。
您还可以检查filterGroovyFiles
是否具有适当的值。
我希望它会有所帮助。
- 编辑 -
使用def filterGroovyFiles = ~/.*\.groovy$/
和此文件树运行代码:
plugins
|--sub1
| |-dum.groovy
| |-dum2.groovy
dum3.groovy
所有三个groovy文件包含(但不是以!!开头)“@Table”(带尾随空格!!)。我得到了预期的输出:
dum3.groovy
dum.groovy
dum2.groovy
(请注意,同一文件夹sub1中的dum.groovy和dum2.groovy都会出现。)
我正在使用groovy 2.0.5。
请重新检查您的文件: