日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

工具类commons-io的Tailer用来监控文件

發布時間:2023/12/13 综合教程 27 生活家
生活随笔 收集整理的這篇文章主要介紹了 工具类commons-io的Tailer用来监控文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、前言:在Linux下有使用tail命令

在Commons-io中也提供這種方法

二、他采用的是線程方式來監控文件內容的變化

1、Tailer類(采用線程的方式進行文件的內容變法)

2、TailerListener類

3、TailerListenerAdapter類,該類是集成了TailerListener的實現空的接口方式

三、測試使用代碼

[java]view plaincopy

packagecom.hadoop.leran.commons.io;

importorg.apache.commons.io.FileUtils;
importorg.apache.commons.io.IOUtils;
importorg.apache.commons.io.input.Tailer;
importorg.apache.commons.io.input.TailerListenerAdapter;

importjava.io.File;

publicclassTailerTest{

publicstaticvoidmain(String[]args)throwsException{
TailerTesttailerTest=newTailerTest();
tailerTest.test();
booleanflag=true;
Filefile=newFile("C:/Users/hadoop/Desktop/test/1.txt");

while(flag){
Thread.sleep(1000);
FileUtils.write(file,""+System.currentTimeMillis()+IOUtils.LINE_SEPARATOR,true);
}

}

publicvoidtest()throwsException{
Filefile=newFile("C:/Users/hadoop/Desktop/test/1.txt");
FileUtils.touch(file);

Tailertailer=newTailer(file,newTailerListenerAdapter(){

@Override
publicvoidfileNotFound(){//文件沒有找到
System.out.println("文件沒有找到");
super.fileNotFound();
}

@Override
publicvoidfileRotated(){//文件被外部的輸入流改變
System.out.println("文件rotated");
super.fileRotated();
}

@Override
publicvoidhandle(Stringline){//增加的文件的內容
System.out.println("文件line:"+line);
super.handle(line);
}

@Override
publicvoidhandle(Exceptionex){
ex.printStackTrace();
super.handle(ex);
}

},4000,true);
newThread(tailer).start();
}
}

工具類commons-io的文件監控

一、前言:

使用Commons-io的monitor下的相關類可以處理對文件進行監控,它采用的是觀察者模式來實現的

1、可以監控文件夾的創建、刪除和修改

2、可以監控文件的創建、刪除和修改

3、采用的是觀察者模式來實現的

4、采用線程去定時去刷現檢測文件的變化情況

二、代碼分析

(一)、FileAlterationListener分析,提供了檢測文件夾和文件的變化回調函數的接口,觀察模式回調的接口

1、提供了文件夾的創建、刪除和修改的接口

2、提供了文件的創建、刪除和修改的接口

(二)、FileAlterationListenerAdaptor實現了FileAlterationListener的接口,只是空的實現,可以根據用戶的使用情況來處理文件的變化

(三)、FileAlterationObserver重點的觀察者模式的類

1、提供對某路徑下文件監控

2、使用FileFilter來控制對那些文件進行監控,在實際的使用情況是使用FileFilterUtils來控制,他設置了添加一系列的FileFilter

3、IOCase可以用來對系統的判斷,使用是Unix和Windows進行不同的處理,Unix支持文件名的大小寫,Windows不區分文件的大小寫

(四)、FileAlterationMonitor類

1、它繼承了Runnable接口

2、它檢測文件的過程是采用一個線程去不停的進行文件的檢測

3、精髓之處,文件的內容的改變處理過程

對于文件的變化有點不太準確,只是判斷文件名、文件大小、文件的修改日期來判斷

( 五)、FileEntry類

1、提供了文件夾和文件夾下文件的層級結構

2、提供了文件是否改變了,采用了備忘錄模式(形式上有點,沒有很嚴格的控制),將上一次的狀態進行保存,在比較的時候重新讀取新的狀態,

比較完后備忘錄重新將新的狀態進行保存。

(六)、Common-io中提供一序列的文件的FileFilter類,使用是可以看情況查看源代碼

1、提供了FileFilterUtils來提供添加一些列的FileFilter

2、添加一序列的FileFilter的實現是使用AndFileFilter來實現的

3、提供相識的OrFileFilter和NotFileFilter

三、讀源代碼的測試代碼

[java]view plaincopy

packagecom.hadoop.leran.commons.io;

importorg.apache.commons.io.FileUtils;
importorg.apache.commons.io.filefilter.FileFilterUtils;
importorg.apache.commons.io.filefilter.IOFileFilter;
importorg.apache.commons.io.monitor.FileAlterationListenerAdaptor;
importorg.apache.commons.io.monitor.FileAlterationMonitor;
importorg.apache.commons.io.monitor.FileAlterationObserver;

importjava.io.File;
importjava.io.FileFilter;


publicclassFileAlterationObserverTest{

publicstaticvoidmain(String[]args)throwsException{


FileAlterationObserverTestfileAlter=newFileAlterationObserverTest();
fileAlter.test();
StringfilePath="C:/Users/hadoop/Desktop/test/";
Filefile=newFile(filePath);
FileUtils.deleteDirectory(file);
file.mkdirs();
//FiletxtFile=newFile(filePath+File.separator+System.currentTimeMillis()+".txt");
//FileUtils.touch(txtFile);
//FiletxtFile=newFile("C:/Users/hadoop/Desktop/test/1401629335839.txt");
//txtFile.deleteOnExit();
//FileUtils.touch(txtFile);

//FilenewFile=newFile(filePath+File.separator+System.currentTimeMillis());
//newFile.mkdirs();

booleanflag=true;
while(flag){
/***測試文件的變化代碼*/
//FilenewFileTxt=newFile(filePath+File.separator+System.currentTimeMillis()+".txt");
//FileUtils.touch(newFileTxt);
//Thread.sleep(2000);
//FileUtils.write(newFileTxt,"1",true);
//Thread.sleep(2000);
//newFileTxt.delete();



/****測試文件夾的變化代碼***/
FilenewFile=newFile(filePath+File.separator+System.currentTimeMillis());
newFile.mkdir();
Thread.sleep(2000);
FilenewFileTxt=newFile(newFile.getAbsolutePath()+File.separator+System.currentTimeMillis()+".txt");
FileUtils.touch(newFileTxt);
}
}

publicvoidtest()throwsException{
StringfilePath="C:/Users/hadoop/Desktop/test/";
FileFilterfilter=FileFilterUtils.and(newMyFileFilter());
FileAlterationObserverfileAlterationObserver=newFileAlterationObserver(filePath,filter);
fileAlterationObserver.addListener(newFileAlterationListenerAdaptor(){

@Override
publicvoidonStart(FileAlterationObserverobserver){
System.out.println("startonfile");
super.onStart(observer);
}

@Override
publicvoidonDirectoryDelete(Filedirectory){
System.out.println("deletefile");
super.onDirectoryDelete(directory);
}

@Override
publicvoidonDirectoryCreate(Filedirectory){
System.out.println("createfile");
super.onDirectoryCreate(directory);
}

@Override
publicvoidonDirectoryChange(Filedirectory){
System.out.println("changefile");
super.onDirectoryChange(directory);
}

@Override
publicvoidonFileCreate(Filefile){
System.out.println("filecreate");
super.onFileCreate(file);
}

@Override
publicvoidonFileDelete(Filefile){
System.out.println("filedelete");
super.onFileDelete(file);
}

@Override
publicvoidonFileChange(Filefile){
System.out.println("filechange");
super.onFileChange(file);
}
});
FileAlterationMonitorfileAlterationMonitor=newFileAlterationMonitor(1000);
fileAlterationMonitor.addObserver(fileAlterationObserver);
fileAlterationMonitor.start();
}
}

/***
*自定義的文件過濾器
*/
classMyFileFilterimplementsIOFileFilter{

@Override
publicbooleanaccept(Filefile){
//Stringextension=FilenameUtils.getExtension(file.getAbsolutePath());
//if(extension!=null&&extension.equals("txt"))
//returntrue;
//returnfalse;
returntrue;
}

@Override
publicbooleanaccept(Filedir,Stringname){
//System.out.println("dir:"+dir+"----->"+name);
returntrue;
}
}

出處:http://blog.csdn.net/xiaoyezi1001/article/details/28095281

總結

以上是生活随笔為你收集整理的工具类commons-io的Tailer用来监控文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。