2016-11-03 1 views
0

を読ん:出力はありません、私は次のように行毎にファイルを読み込むためにアッカFILEIOを使用していたファイル

def main(args: Array[String]): Unit = { 
    implicit val system = ActorSystem("MySys") 
    implicit val materializer = ActorMaterializer() 
    FileIO.fromPath(Paths.get("/foo/1.csv")).via(Framing.delimiter(ByteString("\n"), 256, true).map(_.utf8String)).runForeach(println) 
    system.terminate() 
    } 

をしかし、私はこれを実行すると、私は、コンソールには何の出力を参照してくださいません。ファイルのパスが正しくあり、ファイルに内容があります。私は間違って何をしていますか?

答えて

1

ファイルを処理する前に、AkkaSystemを終了します。

この

FileIO.fromPath(Paths.get("/foo/1.csv")) 
    .via { 
    Framing.delimiter(ByteString("\n"), 256, true).map(_.utf8String) 
    } 
    .runForeach(println) 
    .onComplete{ _ => 
    system.terminate() 
    } 

Await.result(system.whenTerminated, Duration.Inf) 
+0

まだ何もコンソールに印刷されません。 –

+0

それからあなたのファイルが見つからないと思われます。私はちょうど私のUbuntuのランダムなテキストファイルでこのコードをテストしました。 – expert

+0

ソース(io.Source( "/ foo/1.csv"))を使用すると、ファイルパスが見つかって処理されるので、ファイルパスは正しいです。 –

0

ような何かを行う問題は、あなたが前にあなたのFuture完了し、プログラムの終了まで待機しないということです。あなたはそれを修正することができます:

def main(args: Array[String]): Unit = { 
    implicit val system = ActorSystem("MySys") 
    implicit val materializer = ActorMaterializer() 
    val future = FileIO.fromPath(Paths.get("/foo/1.csv")).via(Framing.delimiter(ByteString("\n"), 256, true).map(_.utf8String)).runForeach(println) 

    import scala.concurrent.Await 
    import scala.concurrent.duration.Duration 
    Await.result(future, Duration.Inf) 
} 
+0

ディスパッチャのアクティブなスレッドがアプリの終了を妨げるため、ストリームを持たなくてもアプリは停止しません。 – expert

+0

私が答えを書いたとき、あなたの答えに 'Await.result(system.whenTerminated、Duration.Inf)'はありませんでした。また、私のコードがうまくいかないと思いますか? – kardapoltsev

+0

あなたのコードは動作します、Alexey。私はダウンボートしなかった(そしてOPもしなかった)。おそらく、誰かが無限のブロックを好きではなかったでしょう。 – expert

関連する問題