2016-07-14 37 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不會馬上閱讀。

相關問題