我想在scala中读取一个不断更新的文件(tail -f),我不能使用其他工具,例如tail,因为我需要对记录进行一些额外的处理。
所以每次如何跟踪确切的文件内容。
答案 0 :(得分:6)
在Apache commons中有一个“tail -f”的实现。 http://commons.apache.org/proper/commons-io/javadocs/api-release/org/apache/commons/io/input/Tailer.html
通过谷歌搜索,我找到了另一个“tail -f”的实现:https://github.com/alaz/tailf/blob/master/src/main/scala/com/osinka/tailf/Tail.scala
答案 1 :(得分:3)
您始终可以从Scala拨打tail -f
,然后在那里进行额外处理。使用scala.sys.process
API:
import scala.sys.process._
def someProcessing(line: String): Unit = {
// do whatever you want with that line
print("[just read this line] ")
println(line)
}
// the file to read
val file = "mylogfile.txt"
// the process to start
val tail = Seq("tail", "-f", file)
// continuously read lines from tail -f
tail.lineStream.foreach(someProcessing)
// careful: this never returns (unless tail is externally killed)
编辑:这样做的一个优点是不涉及任何轮询。但作为交换,这会以可能不可中断的方式阻止调用线程。