2017-01-18 42 views
0

我試圖從使用alpakka和scala流的ftp服務器讀取文件。 我從Ftp.fromPath(...)得到的類型是Source[ByteString, Future[IOResult]]。我想逐行閱讀文件(這是一個CSV文件),但我不知道如何。來自ftp的Akka流,逐行

我將不勝感激任何幫助。

+0

你能展示比這更多的代碼嗎? –

回答

3

有一種標準方法可以將Source[ByteString, _]按行分割,稱爲。它可用於這樣的:

val source: Source[ByteString, Future[IOResult]] = Ftp.fromPath(...) 

val splitter = Framing.delimiter(
    ByteString("\n"), 
    maximumFrameLength = 1024, 
    allowTruncation = true 
) 

val result: Source[ByteString, Future[IOResult]] = source.via(splitter) 

maximumFrameLength參數確定的線的最大長度;您可以將其設置爲Int.MaxValue以獲得基本無限的行長度(但如果您的CSV行很長,可能會很危險),並且allowTruncation設置爲true,以允許在CSV末尾沒有新行的情況下文件。

result源代碼在物化時會產生與每行對應的ByteString s,但不包含換行符。如果您希望文件包含Windows行分隔符(「\ r \ n」),那麼您需要手動修剪這些字符串。