File io 在Clojure中跟踪文件?
在Clojure中跟踪文件的最佳方法是什么?我还没有遇到任何实用程序,可以帮助这样做,但如何建立一个想法将不胜感激 谢谢。类似于:File io 在Clojure中跟踪文件?,file-io,clojure,File Io,Clojure,在Clojure中跟踪文件的最佳方法是什么?我还没有遇到任何实用程序,可以帮助这样做,但如何建立一个想法将不胜感激 谢谢。类似于: (take-last 10 (line-seq (clojure.contrib.io/reader "file"))) 您可以使用RandomAccessFile直接搜索文件的末尾,并从那里搜索换行符。不像take last方法那样优雅和简短,但也不像O(n)那样,这可能对大文件大小很重要 不过,对于tail-f,没有解决方案。可以从中找到一些灵感。正如kota
(take-last 10 (line-seq (clojure.contrib.io/reader "file")))
您可以使用
RandomAccessFile
直接搜索文件的末尾,并从那里搜索换行符。不像take last
方法那样优雅和简短,但也不像O(n)
那样,这可能对大文件大小很重要
不过,对于tail-f
,没有解决方案。可以从中找到一些灵感。正如kotarak所说,您可以使用随机访问文件来查找文件的结尾。不幸的是,您必须忙于等待/睡眠以进行更改
使用惰性序列,您可以“动态”处理行:
更新:
类似于tail-f/var/log/mail.log-n0的东西,使用doseq,因此实际使用了更改
(doseq [line (tail-seq "/var/log/mail.log")] (println line))
谢谢你的指点!由于某些原因,这似乎没有达到预期效果-文件更改似乎没有被检测到!(程序在第一次文件更改后停止)请检查我的更新:也可能写入文件没有“行缓冲”?
(doseq [line (tail-seq "/var/log/mail.log")] (println line))