如何在 Scala 中的大文本文件上返回行迭代器



我有一个巨大的2GB文本文件,我想逐行读取,而无需将所有内容推送到内存中。我为此编写了以下代码片段,但它似乎yield调用不起作用。那么我应该如何从函数返回行迭代器呢?

import java.io.{BufferedReader, File, FileInputStream, InputStream, InputStreamReader}
import java.nio.charset.StandardCharsets
def readLines(fileName: String): Iterable[String] = {
val bufferedReader = new BufferedReader(new InputStreamReader(getClass.getClassLoader.getResourceAsStream(fileName), StandardCharsets.UTF_8))
for (line <- bufferedReader.readLine()) {
yield line
}
}

你应该使用scala.io.Source

Source.fromFile(fileName).getLines()

或者您可以检查scala.io.BufferedSource.BufferedLineIterator代码并编写相同的代码。

最新更新