将Scala中BufferedReader的所有行读入字符串
Posted
技术标签:
【中文标题】将Scala中BufferedReader的所有行读入字符串【英文标题】:Read All Lines of BufferedReader in Scala into a String 【发布时间】:2013-09-26 06:15:14 【问题描述】:如何读取BufferedReader
的所有行并将其存储到字符串中?
val br = new BufferedReader(...)
val str: String = getAllLines(br) // getAllLines() -- is where I need help
类似于这个question。
【问题讨论】:
一定要用BufferedReader
吗?为什么不用Source.fromFile("myfile.txt").getLines()
或类似的?
我需要使用BufferedReader
,因为我从这里使用UnicodeBOMInputStream
- ***.com/questions/1835430/…。
那么Source.fromInputStream(myUnicodeBOMInputStream).getLines()
可能会更容易。
【参考方案1】:
这就是我在 Scala 中处理BufferedReader
的方式:
val br:BufferedReader = ???
val strs = Stream.continually(br.readLine()).takeWhile(_ != null)
阅读器的每一行都会有一个字符串。如果你想在一个字符串中:
val str = Stream.continually(br.readLine()).takeWhile(_ != null).mkString("\n")
【讨论】:
continually
的使用非常棒。我还不知道。谢谢!
我建议根据Java API docs 直接调用BufferedReader.close()
。请确保在您使用数据后调用它,因为Stream
是懒惰的。例如,使用mkString("\n")
的建议将强制评估Stream
,force
也是如此。但是如果您在val strs = ...
行之后调用close()
,您将无法读取任何行。
有没有办法避免在您的解决方案中使用null
?
@kfkhalili,一种方法是:val str = Stream.continually(reader.readLine()).takeWhile(Option(_).nonEmpty).mkString("\n")
以上是关于将Scala中BufferedReader的所有行读入字符串的主要内容,如果未能解决你的问题,请参考以下文章
java:如何使用 bufferedreader 读取特定行