Groovy中的最后一行文件

时间:2011-11-01 18:55:08

标签: file text groovy line

根据我的研究,阅读文本文件的最后一行似乎很复杂。我有一个文本文件,基本上由行块组成,每个块由一个空行分隔。我编写了一个Groovy脚本,可以通过它后面的空行识别每个块。我正试图计算段落。

我的问题是我的最后一个块后面没有空白行(这些块是由另一个程序生成的,它们不仅仅是我输入的文件)

我在想我可以通过在文件的末尾添加一个空行,然后运行我的脚本来解决这个“读取文件的最后一行”问题。这很聪明,还是像阅读最后一行一样难?

如果可行,我该怎么做?

2 个答案:

答案 0 :(得分:3)

据我所知,你有两个选择。

如果您可以将整个文件加载到内存中,您可以执行以下操作:

int countBlocksInMem( File f ) {
  f.readLines().with { lines ->
    int size = lines.grep { it == '' }.size()
    if( lines[ -1 ] != '' ) size++
    size
  }
}

如果它太大而无法加载到内存中,你可以这样做:

int countBlocks( File f ) {
  String lastLine
  int size = 0
  f.eachLine { line ->
    lastLine = line
    if( !line ) size++
  }
  if( lastLine ) size++
  size
}

这两种方法基本上都是空白行的数量,如果文件中的最后一行不是空白,则将计数增加1

问题完全改变后编辑

要在文件中附加空白行,您可以执行以下操作:

new File( 'file.txt' ) << '\n'

或者,与作家

new File( 'file.txt' ).withWriterAppend {
  it.writeLine()
}

当然,如果你有多个东西同时写入同一个文件,这只会产生一团糟

答案 1 :(得分:0)

这是google最后一行文件groovy的第一个热门话题。 对于那些希望快速简便地获取最后一行的人

    new(File("/home/user/somefile.txt").eachLine{
        if(it != null){
            lastLine = it
        }
    }

.eachLine遍历文本文件的每一行,并且lastLine设置为it变量,直到它为null。很简单