2009-06-12 85 views

回答

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

這好像就是我要找的。我會試試這個,謝謝。 – geowa4 2009-06-12 18:59:31

+0

沒問題,隨時upvote它;) – Gandalf 2009-06-12 20:20:37

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」的字符串。