2016-07-14 66 views
0

这似乎是世界上最简单的事情,但我刚刚开始,我很困难,所以请耐心等待。如何从文本文件创建一个Akka Source [String]?

FileIO对象提供了fromFile函数,不出意外地返回Source[ByteString, Future[IOResult]]

但是我有一个UTF编码的文本文件,我想要一个Source[String, Future[IOResult]] - 也就是一个常规字符串的源,它带有unicode字符,而不是无意义的字节串。

这是一个Hello,世界级的例子,但我被卡住了。

(的,什么是不帮助是scala.io.Source之间的名称冲突,其fromFile是我需要什么,并且akka.stream.scaladsl.Source因此,如果任何人都可以解释给我,我会很感激。)

+0

我的回答有帮助吗? – jarandaf

+0

@jarandaf - 有点。这很复杂,我决定使用普通的Scala I/O。 – Malvolio

回答

1

您可以使用decodeStringByteString功能,解码为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
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不会马上阅读。

相关问题