我是Groovy脚本的新手,需要帮助。 我尝试使用以下脚本来计算具有特定文本的行数。
观察到错误:
groovy.lang.MissingMethodException: No signature of method: java.io.File.eachline() is applicable for argument types: (Hemanth_v1$_run_closure2) values: [Hemanth_v1$_run_closure2@10f39d0]
Possible solutions: eachLine(groovy.lang.Closure), eachLine(int, groovy.lang.Closure), eachLine(java.lang.String, groovy.lang.Closure), eachFile(groovy.lang.Closure), eachLine(java.lang.String, int, groovy.lang.Closure), eachFile(groovy.io.FileType, groovy.lang.Closure)
脚本:
def file = new File('C:\\NE\\header.txt');
count = 0
def data1= file.filterLine { line ->
line.contains('smtpCus:');
}
//custom code by Hemanth
file.eachline { line, count ->
if (line.contains('Received:')) {
count++
}
}
答案 0 :(得分:1)
您向我们展示的脚本有两个问题:
file.eachline
中存在拼写错误 - 应为file.eachLine
eachLine
的闭包中的count
,所以外部count
在执行后仍然是0
。以下是您的脚本应该是什么样的:
def file = new File('C:\\NE\\header.txt')
count = 0
def data1 = file.filterLine { line ->
line.contains('smtpCus:')
}
//custom code by Hemanth
file.eachLine { line ->
if (line.contains('Received:')) {
count++
}
}
println count
java.util.stream.Stream<T>
如果要在Groovy(以及一般的Java)中读取文件,还有一件事值得一提。如果使用大文件,最好使用Java Stream API加载此文件 - Files.lines(path)
import java.nio.file.Files
import java.nio.file.Paths
long counter = Files.lines(Paths.get('C:\\NE\\header.txt'))
.filter { line -> line.contains('Received:') }
.count()
println counter
答案 1 :(得分:0)
Groovy方法使用驼峰案例。应该是eachLine()而不是eachline()。看看是否有帮助!