使用Groovy读取文件的特定行

时间:2011-11-22 07:16:21

标签: groovy

有人可以帮我逐行阅读文件,

我有这段代码 - 但是这段代码会打印所有内容。我需要逐行显示第5个(或特定的),因此我想要动态访问和打印任何行。我需要打印文本文件的第5行。

//read from file

myFile = new File("C:\\Documents and Settings\\ABCEDFG\\Desktop\\soapUI\\params.txt")
printFileLine = { log.info "File line: " + it }
myFile.eachLine(0, printFileLine)

请帮助 - 提前感谢您的帮助!

^由于

3 个答案:

答案 0 :(得分:8)

这是邋and和浪费,但你可以做到

log.info "Line 5: " +  myFile.readLines().get(4)

答案 1 :(得分:4)

如果你不想在内存中全部使用,你可以这样做:

String readLine( File f, int n ) {
  String line = null
  f.withReader { r ->
    while( n-- > 0 && ( ( line = r.readLine() ) != null ) ) ;
  }
  line
}

然后,打印第5行:

File infile = new File("C:\\Documents and Settings\\ABCEDFG\\Desktop\\soapUI\\params.txt")
String line = readLine( infile, 5 )
println line

但是,如果您想以随机顺序访问方式读取多行,这可能会浪费,因为您每次都会从头开始调整文件。但是,如果你因为它太大而无法将其加载到内存中,那么你就无法做到其他事情

答案 2 :(得分:1)

你不能以任何优化的方式做到这一点。这里有2个选项:

  1. 将所有文件加载到内存中并构建行索引。
  2. 每次需要访问N行时,请读取0到(N-1)之间的所有行。
  3. 说明:

    换行符只是一个角色。如果没有读取所有字符,你就无法告诉文件系统神奇地跳过文件到第N行。你需要实际找到第N行换行符来知道第N行的开始位置。