我需要在BufferedInputStream中包裝Unix命令「tail -f」。我不想模擬或模仿this question所述的尾巴。相反,我想用尾巴,等着它給我一條新線。Java「tail -f」包裝
3
A
回答
14
最好的辦法是使用Process
類與閱讀Scanner
:
Runtime r = Runtime.getRuntime()
Process p = r.exec("tail -f")
Scanner s = new Scanner(p.getInputStream())
while (s.hasNextLine()) {
String line = s.nextLine()
// Do whatever you want with the output.
}
hasNextLine()
應該阻止,因爲它是在等待更多的輸入從輸入流,這樣你就不會忙着等待數據進來
1
看看Runtime.exec(String命令)。返回一個流程具有輸入和輸出流的對象。
0
我猜測系統()和popen()類型的方法將無法正常工作,因爲它們會阻止您的程序,直到tail命令終止。
我認爲你可以將輸出重定向到一個文件,並對最後一個版本使用'diff'來查看哪些行是新的?
0
如果有unix命令
tail -f <file> | <some java program>
然後尾部將顯示爲一個InputStream
可能阻塞一段時間。如果你不想阻止自己,你可以使用nio軟件包。我相信大多數其他訪問tail命令的方法(例如Process
)都會產生類似的InputStream
。
1
檢查也ProcessBuilder:
Process tail = new ProcessBuilder("tail", "-f", file).start();
BufferedInputStream bis = new BufferedInputStream(tail.getInputStream())
其中file
是類似「/ var/log/messages」的字符串。
0
相關問題
- 1. Tail -f + grep?
- 2. Combine tail -F和json
- 3. unix/linux的Java IO實現「tail -f」
- 4. tail -F log.log | grep ResponseTime |切-d = -f 2
- 5. 「tail -f filename」的Web實現?
- 6. 在C++中實現「tail -f」
- 7. 相當於tail -f for ls?
- 8. 「tail -f」會使磁盤滿?
- 9. tail -f使用PuTTY掛起
- 10. 在Perl中模擬tail -f
- 11. 'tail -f'數據庫表
- 12. 如何在Java中使用遠程Unix系統「tail -f」文件?
- 13. 是否可以將「tail -f」命令輸出到java程序?
- 14. 如何通過java程序停止tail -f命令?
- 15. linux命令「tail -f filename」不起作用
- 16. Python 2.7子流程:tail -f | grep
- 17. tail -f從整個文件開始
- 18. 'grep -q'不能以'tail -f'退出
- 19. 實時修改`tail -f`輸出
- 20. 理解「在蟒蛇的tail -f」
- 21. 如何將tail -f拖入awk
- 22. 在瀏覽器中使用tail -f
- 23. 查看更多包含'rhc tail'和'rhc-tail-files'的行
- 24. 跟隨emacs中的緩衝區,一個la tail -f或更少+ F
- 25. 在F中包裝流中的序列#
- 26. 寫java包裝
- 27. 如何僅顯示tail -f中新記錄的內容?
- 28. unix中tail -f和tailf有什麼區別?
- 29. `sudo tail -f /var/log/auth.log`是什麼意思?
- 30. 「tail -f」替代它不滾動終端窗口
這好像就是我要找的。我會試試這個,謝謝。 – geowa4 2009-06-12 18:59:31
沒問題,隨時upvote它;) – Gandalf 2009-06-12 20:20:37