读取文件

时间:2016-11-03 18:50:17

标签: scala akka akka-stream

我使用Akka 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()
  }

但是当我运行它时,我看到控制台上没有输出。文件路径正确,文件中有内容。我做错了什么?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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)
}