采用java实现Linux Tail 功能信息,直接代码:

1.LogFileTailerListener是变化内容输入,


  
  1. public abstract interface LogFileTailerListener {    
  2.     public abstract void newLogFileLine(String line);    

 2.LogFileTailer 对文件监听


  
  1. public class LogFileTailer extends Thread {  
  2.     private long sampleInterval = 9000;  
  3.  
  4.     private File logfile;  
  5.  
  6.     private boolean startAtBeginning = false;  
  7.  
  8.     private boolean tailing = false;  
  9.  
  10.     private Set listeners = new HashSet();  
  11.  
  12.     public LogFileTailer(File file) {  
  13.         this.logfile = file;  
  14.     }  
  15.  
  16.     public LogFileTailer(File file, long sampleInterval,  
  17.             boolean startAtBeginning) {  
  18.         this.logfile = file;  
  19.         this.sampleInterval = sampleInterval;  
  20.         this.startAtBeginning = startAtBeginning;  
  21.     }  
  22.  
  23.     public void addLogFileTailerListener(LogFileTailerListener l) {  
  24.         this.listeners.add(l);  
  25.     }  
  26.  
  27.     public void removeLogFileTailerListener(LogFileTailerListener l) {  
  28.         this.listeners.remove(l);  
  29.     }  
  30.  
  31.     protected void fireNewLogFileLine(String line) {  
  32.         for (Iterator i = this.listeners.iterator(); i.hasNext();) {  
  33.             LogFileTailerListener l = (LogFileTailerListener) i.next();  
  34.             l.newLogFileLine(line);  
  35.         }  
  36.     }  
  37.  
  38.     public void stopTailing() {  
  39.         this.tailing = false;  
  40.     }  
  41.  
  42.     public void run() {  
  43.         long filePointer = 0;  
  44.  
  45.         if (this.startAtBeginning) {  
  46.             filePointer = 0;  
  47.         } else {  
  48.             filePointer = this.logfile.length();  
  49.         }  
  50.  
  51.         try {  
  52.             RandomAccessFile file = new RandomAccessFile(logfile, "r");  
  53.             while (this.tailing) {  
  54.                 long fileLength = this.logfile.length();  
  55.                 if (fileLength < filePointer) {  
  56.                     file = new RandomAccessFile(logfile, "r");  
  57.                     filePointer = 0;  
  58.                 }  
  59.                 if (fileLength > filePointer) {  
  60.                     file.seek(filePointer);  
  61.                     String line = file.readLine();  
  62.                     while (line != null) {  
  63.                         this.fireNewLogFileLine(line);  
  64.                         line = file.readLine();  
  65.                     }  
  66.                     filePointer = file.getFilePointer();  
  67.                 }  
  68.                 sleep(this.sampleInterval);  
  69.             }  
  70.             file.close();  
  71.         } catch (IOException e) {  
  72.              
  73.         } catch (InterruptedException e) {  
  74.              
  75.         }  
  76.     }  
  77.  
  78.     public void setTailing(boolean tailing) {  
  79.         this.tailing = tailing;  
  80.     }  
  81.  
  82. }  

3.测试


  
  1. public class Tail implements LogFileTailerListene{           
  2.      public void newLogFileLine(String line) {  
  3.         System.out.println(line);       
  4.      }  
  5.      public static void main(String[] args) {  
  6.         LogFileTailer tailer = new LogFileTailer(new File(filename), 1000true);  
  7.         tailer.setTailing(true);  
  8.         tailer.addLogFileTailerListener(this);  
  9.         tailer.start();  
  10.      }