这似乎是世界上最简单的事情,但我刚刚开始并且我受到了阻碍,所以请耐心等待。
FileIO
对象提供fromFile
函数,毫不奇怪地返回Source[ByteString, Future[IOResult]]
。
但我有一个UTF编码的文本文件,我想要一个Source[String, Future[IOResult]]
- 也就是常规字符串的源,带有unicode字符,而不是字符串的废话。
这是一个Hello,世界级的例子,但我被困了。
(scala.io.Source
fromFile
正是我需要的akka.stream.scaladsl.Source
与{{1}}之间的名称冲突是什么,所以如果有人能向我解释,我很感激。)
答案 0 :(得分:1)
您可以使用ByteString
中的decodeString
功能解码为UTF-x:
decodeString(charset: String): String
或者更常见的是,对于UTF-8:
utf8String: String
所以,基本上:
val path = Paths.get("/tmp/example.txt")
FileIO.fromPath(path)
.via(Framing.delimiter(ByteString(System.lineSeparator), maximumFrameLength=8192, allowTruncation=true))
.map(_.utf8String)
请注意,FileIO.fromFile
现已弃用。
答案 1 :(得分:1)
import akka.NotUsed
import scala.io.{Source => fileSource}
import akka.stream.scaladsl.{Source => strmSource}
val it = fileSource.fromFile("/home/expert/myfile.txt").getLines()
val source : strmSource[String, NotUsed] = strmSource.fromIterator(() => it)
.map { line =>
line.reverse
}
整个事情被懒惰地评估,因此100GB不会立刻读取。