我有一个巨大的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
代码并编写相同的代码。