在scala中读取文本文件,一行接一行,不迭代

时间:2015-06-16 09:30:53

标签: scala io

我正在尝试用Scala打开一个文本文件,读取第一行,然后读取第二行,然后读取第三行。

我在网上找到的所有样本都希望将整个文件读取/缓冲到列表或数组中,然后从该结构中访问各行。

此代码不能如上所述(当然)。 它将整个文件读入“first”,因为“file”是一个BufferedStream,而getLines会取出所有行。

viewGroup.removeView(view)

我可以使用什么习语/功能一次读取一行...而不使用列表/数组作为中间步骤。

2 个答案:

答案 0 :(得分:2)

如评论中所述,.mkString将获取迭代器将返回的所有元素,并将它们连接在一个字符串中。

@Régis Jean-Gilles的选项可能是最好的,如果您已经知道文件中至少有三行。

另一种选择是调用getLines()后跟grouped(3)来获取一个迭代器,将元素分组为3个块。调用next()将为您提供一个最多包含三个元素的列表(如果迭代器只有两个元素可以返回,它可以少一些。)

val ite = io.Source.fromFile("textfile.txt").getLines().grouped(3)

//list with the first three elements, if any -  
//otherwise an empty list if the file is empty
val list = if(ite.hasNext()) ite.next() else Nil 

如果文件中的行数少于3行,至少它确实会在运行时没有NoSuchElementException

答案 1 :(得分:-1)

我相信你也应该在阅读后正确关闭文件以释放资源。以下是您要查找的代码:

import scala.io.Source

def main(args: Array[String]): Unit = {

var itr = Source.fromFile("input.txt")
var buffer = itr.getLines()

var line1 = buffer.next()
var line2 = buffer.next()
var line3 = buffer.next()
var line4 = buffer.next()

println("line1 "+line1+" \nline2 "+line2+" \nline3 "+line3+" \nline4 "+line4)

itr.close()
}