java 文件监视_Java实现文件监控

1 /**2 * Mar 14, 20119:35:23 AM3 *@authorgaoyb(www.mspring.org)4 */5 packageorg.mspring.core;6 7 importjava.io.File;8 importjava.lang.ref.WeakReference;9 importjava.util.ArrayList;10 importjava.util.Collection;11 importjava.util.Date;12 importjava.util.HashMap;13 importjava.util.Iterator;14 importjava.util.Map;15 importjava.util.Timer;16 importjava.util.TimerTask;17 18 /**19 *@authorgaoyb20 *21 */22 publicclassTest {23 publicstaticvoidmain(String args[]) {24 FileMonitor monitor=newFileMonitor(1000);25 monitor.addFile(newFile("E:\\test.log"));26 monitor.addListener(newFileListenerImpl());27 while(!false);28 }29 }30 31 interfaceFileListener{32 voidfileChanged(File file);33 }34 35 classFileListenerImplimplementsFileListener{36 37 /*(non-Javadoc)38 * @see org.mspring.org.FileListener#fileChanged(java.io.File)39 */40 publicvoidfileChanged(File file) {41 //TODO Auto-generated method stub42 System.out.println("File ["+file.getName()+"] changed at"+newDate());43 }44 45 }46 47 classFileMonitor{48 privateTimer timer;49 privateMap fileMap;50 privateCollection listeners;51 52 publicFileMonitor(longpollingInterval){53 fileMap=newHashMap();54 listeners=newArrayList();55 timer=newTimer(true);56 timer.schedule(newFileMonitorNotifier(),0,pollingInterval);57 }58 59 /**60 * 停止监听61 */62 publicvoidstop(){63 timer.cancel();64 }65 66 /**67 * 添加监听文件68 *@paramfile69 */70 publicvoidaddFile(File file){71 if(!fileMap.containsKey(file)){72 longmodifiedTime=file.exists()?file.lastModified() :-1;73 fileMap.put(file,newLong(modifiedTime));74 }75 }76 77 /**78 * 移除监听文件79 *@paramfile80 */81 publicvoidremoveFile(File file){82 fileMap.remove(file);83 }84 85 /**86 * 添加文件监听器87 *@paramfileListener88 */89 publicvoidaddListener(FileListener fileListener){90 for(Iterator i=listeners.iterator(); i.hasNext();){91 WeakReference reference=(WeakReference) i.next();92 FileListener listener=(FileListener) reference.get();93 if(listener==fileListener)94 return;95 }96 listeners.add(newWeakReference(fileListener));97 }98 99 /**100 * 移除文件监听器101 *@paramfileListener102 */103 publicvoidremoveListener(FileListener fileListener) {104 for(Iterator i=listeners.iterator(); i.hasNext();) {105 WeakReference reference=(WeakReference) i.next();106 FileListener listener=(FileListener) reference.get();107 if(listener==fileListener) {108 i.remove();109 break;110 }111 }112 }113 114 /**115 * TimerTask116 *@authorgaoyb117 *118 */119 privateclassFileMonitorNotifierextendsTimerTask{120 121 /*(non-Javadoc)122 * @see java.util.TimerTask#run()123 */124 publicvoidrun() {125 //TODO Auto-generated method stub126 Collection files=newArrayList(fileMap.keySet());127 128 for(Iterator i=files.iterator(); i.hasNext();) {129 File file=(File) i.next();130 longlastModifiedTime=((Long) fileMap.get(file)).longValue();131 longnewModifiedTime=file.exists()?file.lastModified() :-1;132 133 if(newModifiedTime!=lastModifiedTime) {134 135 fileMap.put(file,newLong(newModifiedTime));136 137 for(Iterator j=listeners.iterator(); j.hasNext();) {138 WeakReference reference=(WeakReference) j.next();139 FileListener listener=(FileListener) reference.get();140 141 //Remove from list if the back-end object has been GC'd142 if(listener==null)143 j.remove();144 else145 listener.fileChanged(file);146 }147 }148 }149 }150 }151 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值