900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > java 循环读取文件_您如何用Java连续读取文件?

java 循环读取文件_您如何用Java连续读取文件?

时间:2021-01-22 01:55:54

相关推荐

java 循环读取文件_您如何用Java连续读取文件?

小编典典

这有点旧,但是我已经使用了该机制,并且效果很好。

诀窍是使用java.io.RandomAccessFile和,并定期检查文件长度是否大于当前文件位置。如果是,则读取数据。当您达到长度时,您将等待。洗涤,漂洗,重复。

我复制了代码,以防万一新链接停止工作

package com.javasrc.tuning.agent.logfile;

import java.io.*;

import java.util.*;

/**

* A log file tailer is designed to monitor a log file and send notifications

* when new lines are added to the log file. This class has a notification

* strategy similar to a SAX parser: implement the LogFileTailerListener interface,

* create a LogFileTailer to tail your log file, add yourself as a listener, and

* start the LogFileTailer. It is your job to interpret the results, build meaningful

* sets of data, etc. This tailer simply fires notifications containing new log file lines,

* one at a time.

*/

public class LogFileTailer extends Thread

{

/**

* How frequently to check for file changes; defaults to 5 seconds

*/

private long sampleInterval = 5000;

/**

* The log file to tail

*/

private File logfile;

/**

* Defines whether the log file tailer should include the entire contents

* of the exising log file or tail from the end of the file when the tailer starts

*/

private boolean startAtBeginning = false;

/**

* Is the tailer currently tailing?

*/

private boolean tailing = false;

/**

* Set of listeners

*/

private Set listeners = new HashSet();

/**

* Creates a new log file tailer that tails an existing file and checks the file for

* updates every 5000ms

*/

public LogFileTailer( File file )

{

this.logfile = file;

}

/**

* Creates a new log file tailer

*

* @param file The file to tail

* @param sampleInterval How often to check for updates to the log file (default = 5000ms)

* @param startAtBeginning Should the tailer simply tail or should it process the entire

* file and continue tailing (true) or simply start tailing from the

* end of the file

*/

public LogFileTailer( File file, long sampleInterval, boolean startAtBeginning )

{

this.logfile = file;

this.sampleInterval = sampleInterval;

}

public void addLogFileTailerListener( LogFileTailerListener l )

{

this.listeners.add( l );

}

public void removeLogFileTailerListener( LogFileTailerListener l )

{

this.listeners.remove( l );

}

protected void fireNewLogFileLine( String line )

{

for( Iterator i=this.listeners.iterator(); i.hasNext(); )

{

LogFileTailerListener l = ( LogFileTailerListener )i.next();

l.newLogFileLine( line );

}

}

public void stopTailing()

{

this.tailing = false;

}

public void run()

{

// The file pointer keeps track of where we are in the file

long filePointer = 0;

// Determine start point

if( this.startAtBeginning )

{

filePointer = 0;

}

else

{

filePointer = this.logfile.length();

}

try

{

// Start tailing

this.tailing = true;

RandomAccessFile file = new RandomAccessFile( logfile, "r" );

while( this.tailing )

{

try

{

// Compare the length of the file to the file pointer

long fileLength = this.logfile.length();

if( fileLength < filePointer )

{

// Log file must have been rotated or deleted;

// reopen the file and reset the file pointer

file = new RandomAccessFile( logfile, "r" );

filePointer = 0;

}

if( fileLength > filePointer )

{

// There is data to read

file.seek( filePointer );

String line = file.readLine();

while( line != null )

{

this.fireNewLogFileLine( line );

line = file.readLine();

}

filePointer = file.getFilePointer();

}

// Sleep for the specified interval

sleep( this.sampleInterval );

}

catch( Exception e )

{

}

}

// Close the file that we are tailing

file.close();

}

catch( Exception e )

{

e.printStackTrace();

}

}

}

-11-01

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。