解析文件时的Groovy File Traverse行为

时间:2014-11-14 16:35:12

标签: groovy file-type

我有一个在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
}

1 个答案:

答案 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。

请重新检查您的文件:

  • 拥有正确的扩展程序
  • 包含但不是在开头(index == 0)字符串“@Table”