2013-06-20 55 views
3

我有一個程序正在運行,它將日誌寫入文件,我想逐行讀取它。我嘗試使用InputStream,特別是DataInputStream,使用其可用的方法。但它沒有readLine方法,它已被棄用,並建議將其包裝在BufferedReader中以使用readLine。但是,當我使用BufferedReader它不讀取所有行,它通過讀取一行停下來。在java中讀取當前正在寫入的日誌文件

public void read(DataInputStream ins) { 
     try { 
      while(true) { 
       if(ins.available() > 0) { 
        //BufferedReader reader = new BufferedReader(new InputStreamReader(ins)); 
        //System.out.println(reader.readLine()); 
        System.out.println(ins.readLine()); 
       } 
       else { 
        Thread.sleep(200); 
       } 
      } 
     } 
     catch(Exception e) { 
      e.printStackTrace(); 
     } 
} 

所以,代碼工作與ins.readLine(),但它已被棄用,並根據Java文檔使用它BufferedReade r表示。但與reader.readLine()它不工作,因爲我期望。

另外,有什麼其他更好的java方式來做到這一點,因爲我相信這是一些標準問題。我讀了關於拖車類的地方。但無法測試。

+0

什麼不按預期工作? – NINCOMPOOP

+0

當我使用reader.readLine()時,它只讀取第一行 – r0b0

+0

不使用'ävailable()'方法,這是沒用的。 InputStreams不會讀取持續更新的文件。一旦他們到達流結束,他們將停止返回結果,即使底層文件更新。 – jtahlborn

回答

0

How do you continuously read a file in Java?

The trick is to use a java.io.RandomAccessFile, and periodically check if the file length is greater that your current file position. If it is, then you read the data. When you hit the length, you wait. wash, rinse, repeat.

您將需要處理互斥但如果結束(只有一兩件事可以一次 讀/寫或您的數據可能會損壞)

在使用BufferedReader時,它一次只讀一行。如果你想讀一多,你可以使用一個循環,像這樣:

BufferedReader br = new BufferedReader(new FileReader("file.txt")); 
while ((sCurrentLine = br.readLine()) != null) 
{ 
    System.out.println(sCurrentLine); 
} 

這可以供參考導致一個IOException所以包裝在一個try/catch或有你的方法拋出一個和處理它在其他哪裏。

來源:http://www.mkyong.com/java/how-to-read-file-from-java-bufferedreader-example/

+0

這不是goint解決OP的問題。標準InputStreams/Readers不能用於讀取持續更新的文件。 – jtahlborn

+0

@jtahlborn嗯,好吧,看看我能否給出更好的答案。它確實解決了使用BufferedReader的文檔點,但是我會離開它 – Daniel

+0

我想知道如果讀者目前沒有任何行可以讀取,會發生什麼情況,但這並不意味着文件已關閉。 – r0b0