工具类commons-io的Tailer用来监控文件
一、前言:在Linux下有使用tail命令
在Commons-io中也提供這種方法
二、他采用的是線程方式來監(jiān)控文件內(nèi)容的變化
1、Tailer類(采用線程的方式進(jìn)行文件的內(nèi)容變法)
2、TailerListener類
3、TailerListenerAdapter類,該類是集成了TailerListener的實(shí)現(xiàn)空的接口方式
三、測試使用代碼
[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){//增加的文件的內(nèi)容
System.out.println("文件line:"+line);
super.handle(line);
}
@Override
publicvoidhandle(Exceptionex){
ex.printStackTrace();
super.handle(ex);
}
},4000,true);
newThread(tailer).start();
}
}
工具類commons-io的文件監(jiān)控
一、前言:
使用Commons-io的monitor下的相關(guān)類可以處理對(duì)文件進(jìn)行監(jiān)控,它采用的是觀察者模式來實(shí)現(xiàn)的
1、可以監(jiān)控文件夾的創(chuàng)建、刪除和修改
2、可以監(jiān)控文件的創(chuàng)建、刪除和修改
3、采用的是觀察者模式來實(shí)現(xiàn)的
4、采用線程去定時(shí)去刷現(xiàn)檢測文件的變化情況
二、代碼分析
(一)、FileAlterationListener分析,提供了檢測文件夾和文件的變化回調(diào)函數(shù)的接口,觀察模式回調(diào)的接口
1、提供了文件夾的創(chuàng)建、刪除和修改的接口
2、提供了文件的創(chuàng)建、刪除和修改的接口
(二)、FileAlterationListenerAdaptor實(shí)現(xiàn)了FileAlterationListener的接口,只是空的實(shí)現(xiàn),可以根據(jù)用戶的使用情況來處理文件的變化
(三)、FileAlterationObserver重點(diǎn)的觀察者模式的類
1、提供對(duì)某路徑下文件監(jiān)控
2、使用FileFilter來控制對(duì)那些文件進(jìn)行監(jiān)控,在實(shí)際的使用情況是使用FileFilterUtils來控制,他設(shè)置了添加一系列的FileFilter
3、IOCase可以用來對(duì)系統(tǒng)的判斷,使用是Unix和Windows進(jìn)行不同的處理,Unix支持文件名的大小寫,Windows不區(qū)分文件的大小寫
(四)、FileAlterationMonitor類
1、它繼承了Runnable接口
2、它檢測文件的過程是采用一個(gè)線程去不停的進(jìn)行文件的檢測
3、精髓之處,文件的內(nèi)容的改變處理過程
對(duì)于文件的變化有點(diǎn)不太準(zhǔn)確,只是判斷文件名、文件大小、文件的修改日期來判斷
( 五)、FileEntry類
1、提供了文件夾和文件夾下文件的層級(jí)結(jié)構(gòu)
2、提供了文件是否改變了,采用了備忘錄模式(形式上有點(diǎn),沒有很嚴(yán)格的控制),將上一次的狀態(tài)進(jìn)行保存,在比較的時(shí)候重新讀取新的狀態(tài),
比較完后備忘錄重新將新的狀態(tài)進(jìn)行保存。
(六)、Common-io中提供一序列的文件的FileFilter類,使用是可以看情況查看源代碼
1、提供了FileFilterUtils來提供添加一些列的FileFilter
2、添加一序列的FileFilter的實(shí)現(xiàn)是使用AndFileFilter來實(shí)現(xiàn)的
3、提供相識(shí)的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
總結(jié)
以上是生活随笔為你收集整理的工具类commons-io的Tailer用来监控文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UIViewContentMode 图
- 下一篇: SQL Server 中 RAISERR