代码之家  ›  专栏  ›  技术社区  ›  minerals

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

  •  0
  • minerals  · 技术社区  · 6 年前

    我有一个巨大的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
        }
    }
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   Aleksey Isachenkov    6 年前

    你应该使用 scala.io.Source

    Source.fromFile(fileName).getLines()
    

    scala.io.BufferedSource.BufferedLineIterator 编码并编写相同的代码。