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 }
java 文件监视_Java实现文件监控
最新推荐文章于 2023-04-04 15:07:31 发布