根据我的研究,阅读文本文件的最后一行似乎很复杂。我有一个文本文件,基本上由行块组成,每个块由一个空行分隔。我编写了一个Groovy脚本,可以通过它后面的空行识别每个块。我正试图计算段落。
我的问题是我的最后一个块后面没有空白行(这些块是由另一个程序生成的,它们不仅仅是我输入的文件)
我在想我可以通过在文件的末尾添加一个空行,然后运行我的脚本来解决这个“读取文件的最后一行”问题。这很聪明,还是像阅读最后一行一样难?
如果可行,我该怎么做?
答案 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。很简单