2010-11-26 66 views
5

我想在weblogic寫入日誌時使用java讀取weblogic日誌文件(緩衝),但我只想讀取當我啓動時存在的內容閱讀它。Java IO - 在其他應用程序寫入時讀取大文件

我該怎麼做?

public class DemoReader implements Runnable{ 

    public void run() { 
     File f = new File ("c:\\test.txt"); 
     long length = f.length(); 
     long readedBytes = 0; 
     System.out.println(length); 
     try { 
      BufferedReader fr = new BufferedReader(new FileReader(f)); 
      String line = ""; 
      while((line = fr.readLine()) != null && readedBytes < length){ 
       readedBytes += line.getBytes().length; 
       if(readedBytes > length){ 
        break; 
       }else{ 
        System.out.println(line); 
       } 
      } 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

} 
+4

複製文件並從中讀取。完成。 :) – karim79 2010-11-26 11:17:41

+0

增加了一些演示代碼 – 2010-11-26 16:31:47

回答

1

只要日誌文件僅鎖定寫入權限,您應該可以將其複製爲@ karim79的建議。之後,副本屬於你,所以你可以做任何你喜歡的事情。

下面是一些代碼,應該實現你以後在做什麼 - 它只是通過複製字節的文件字節到System.out的流:

public class Main { 

    public static void main(String[] args) throws IOException { 

    // Identify your log file 
    File file = new File("path/to/your/logs/example.log"); 

    // Work out the length at the start (before Weblogic starts writing again) 
    long size = file.length(); 

    // Read in the data using a buffer 
    InputStream is = new FileInputStream(file); 
    BufferedInputStream bis = new BufferedInputStream(is); 

    long byteCount=0; 

    int result; 
    do { 
     // Read a single byte 
     result = bis.read(); 
     if (result != -1) 
     { 
     // Do something with your log 
     System.out.write(result); 
     } else { 
     // Reached EOF 
     break; 
     } 
     byteCount++; 
    } while (byteCount<size); 

    // Printing this causes a final flush of the System.out buffer 
    System.out.printf("%nBytes read=%d",byteCount); 

    bis.close(); 
    is.close(); 
    } 

} 

而且你去那裏。

上的日誌文件注意

如果日誌文件是巨大的(比如> 1GB),那麼你真的應該考慮改變你的日誌記錄配置納入一個滾動的日誌文件,該文件將自動中斷原木分解成塊(比如1Mb),它們更適合在shell編輯器(比如vim)中查看。

3

你可以在你開始閱讀那一刻文件的大小,然後讀取N字節數(假定該文件不是由作家及其從0N內容鎖定的是不會被改變)。

相關問題