Scalish方式读取文件并在文件结束时执行某些操作

时间:2014-03-02 11:56:19

标签: scala playframework playframework-2.2

我正试图找到一种更优雅,更简洁的方式来逐行读取文件并调用函数 到达文件末尾时。这是我目前的实施:

val source = scala.io.Source.fromFile("data.txt")    
for(line  <- source.getLines())
{
   // do something with data
   println(line)
}

// end of file reached do something else
doSomethingWithAllDataLoaded()

在这里,我需要更少的迭代并运行此文件并发读取,最后在每个文件末端调用回调函数。

1 个答案:

答案 0 :(得分:0)

您可以像这样阅读更多Scala风格的文件:

val source = scala.io.Source.fromFile("data.txt")
source.getLines.foreach(println(_))

要并行处理行,请考虑parallel collections。这看起来像这样:

source.getLines.toList.par.foreach(println(_))

但请记住,这样您首先从文件中读取所有行,然后开始并行处理它们。

希望这有帮助

修改

如果您想避免在内存中加载文件 - 只需使用Source.fromFile(...).getLines即可。它返回一个已经很懒的Iterator[String]。更重要的是,您不应使用.toList或类似内容来避免内存问题。像这样的方法会破坏Iterator和强制严格(非懒惰,渴望)集合的所有懒惰。