Jür*_*zel 13
正如kotarak所说,你可以使用RandomAccessFile来寻找文件的末尾.不幸的是,你必须忙着等待/睡觉才能做出改变.
使用延迟序列,您可以"在运行中"处理这些行:
(import java.io.RandomAccessFile)
(defn raf-seq
[#^RandomAccessFile raf]
(if-let [line (.readLine raf)]
(lazy-seq (cons line (raf-seq raf)))
(do (Thread/sleep 1000)
(recur raf))))
(defn tail-seq [input]
(let [raf (RandomAccessFile. input "r")]
(.seek raf (.length raf))
(raf-seq raf)))
; Read the next 10 lines
(take 10 (tail-seq "/var/log/mail.log"))
Run Code Online (Sandbox Code Playgroud)
更新:
类似于tail -f /var/log/mail.log -n 0,使用doseq,因此实际上消耗了更改.
(doseq [line (tail-seq "/var/log/mail.log")] (println line))
Run Code Online (Sandbox Code Playgroud)