无法使用akka流读取文件

时间:2017-07-05 07:00:48

标签: java scala akka actor akka-stream

我们正在尝试从akka流中读取文件。文件包含日志,应用程序很简单,可以将日志写入新文件。但是,当运行我们的程序时,我们会得到意想不到的输出。我们的代码如下:

class LogsAkkaStream {

  implicit val system = ActorSystem("AkkaStreams")
  implicit val ec = system.dispatcher
  implicit val materializer = ActorMaterializer()

  val source: Source[ByteString, Future[IOResult]] = FileIO.fromPath(Paths.get("/home/harmeet/workspace/mylogs.logs"))
  val sink: Sink[ByteString, Future[IOResult]] = FileIO.toPath(Paths.get("."), Set(CREATE, WRITE, APPEND))
  val runnableGraph: RunnableGraph[Future[IOResult]] = source.to(sink)

  runnableGraph.run().foreach { result =>
    println(s"${result.status}, ${result.count} bytes read. ")
  }
}

object LogsAkkaStream extends App {
  new LogsAkkaStream
}

mylogs.logs包含1000行记录,但此程序的output为:Success(Done), 0 bytes read.但是,我们还没有获得实际的程序。

1 个答案:

答案 0 :(得分:3)

当我将已知工作路径放入文件时,它可以在我的REPL中工作。

您需要确保源文件的路径正确,并且您希望将正确的目标路径放到文件

此外,您还需要使用toMat而不是to,这样您就可以获得Read操作的IOResult以及Write操作。 (我建议您执行_ zip _,以便获得Future[(IOResult, IOResult)]