RandomAccessFile类中seek方法可以从指定位置读取文件,可以用来实现文件实时读取。
一、实现步骤:
- 1.首先,要有服务器上日志文件的路径。
String url="/logpath/logFile.log";
- 2.根据路径生成文件对象。
File file = new File(url);
- 3.判断文件对象的合理性:
file.isFile()==true,file.exists()==true;
- 4.将文件赋值为可读权限:
RandomAccessFile randomAccessFile = new RandomAccessFile(file,"r");
- 5.将文件的指针移动到开始字节:
randomAccessFile.seek(startPointer);
- 6.读取日志内容:
randomAccessFile.readLine();
二、代码实现
private long lastTimeFileSize = 0; //上次文件大小
/**
* 实时输出日志信息
* @param logFile 日志文件
* @throws IOException
*/
public void realtimeShowLog(File logFile) throws IOException{
//指定文件可读可写
final RandomAccessFile randomFile = new RandomAccessFile(logFile,"r");
//启动一个线程每10秒钟读取新增的日志信息
ScheduledExecutorService exec = Executors.newScheduledThreadPool(1);
exec.scheduleWithFixedDelay(new Runnable(){
public void run() {
try {
//获得变化部分的
randomFile.seek(lastTimeFileSize);
String tmp = "";
while( (tmp = randomFile.readLine())!= null) {
System.out.println(new String(tmp.getBytes("ISO8859-1")));
}
lastTimeFileSize = randomFile.length();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}, 0, 1, TimeUnit.SECONDS);
}
public static void main(String[] args) throws Exception {
LogView view = new LogView();
final File tmpLogFile = new File("d:/123.txt");
view.realtimeShowLog(tmpLogFile);
}
三、测试
运行main方法,在文件中追加文本,就可以看到控制台也在打印数据。
评论区