无法使用akka流读取文件
Unable to read files by using 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.
尽管如此,我们仍然没有得到实际的程序。
当我输入文件的已知工作路径时,它就会在我的 REPL 中工作。
您需要确保源文件的路径正确,并且您需要将正确的目标路径放入 文件。
此外,您需要使用 toMat
而不是 to
,这样您就可以获得读取操作和写入操作的 IOResult。 (我建议你做 _ zip _
这样你就会得到 Future[(IOResult, IOResult)]
)。
我们正在尝试从 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.
尽管如此,我们仍然没有得到实际的程序。
当我输入文件的已知工作路径时,它就会在我的 REPL 中工作。
您需要确保源文件的路径正确,并且您需要将正确的目标路径放入 文件。
此外,您需要使用 toMat
而不是 to
,这样您就可以获得读取操作和写入操作的 IOResult。 (我建议你做 _ zip _
这样你就会得到 Future[(IOResult, IOResult)]
)。