我想编写一个 Scala 函数来懒惰地读取文件中的所有行(即返回一个Iterator[String]
),这也会在之后关闭文件。我知道这个成语io.Source.fromFile("something.txt").getLines
,但是正如这里所说,这不会在之后关闭文件。当然有一种简单的方法可以做到这一点?
目前我正在使用它,带有scala-arm 库:
import resource.managed
import io.{Source, BufferedSource}
def lines(filename: String): Iterator[String] = {
val reader = managed(Source.fromFile(filename, "UTF-8"))
reader.map(_.getLines).toTraversable.toIterator
}
但据我所知,这似乎将整个文件读入内存。
我来自 Python 背景,这很可笑:
def lines(filename):
with open(filename) as f:
for line in f:
yield line
当然,有一个相当简单的 Scala 等价物,我还没有设法解决。