FileChangedEvent 文件Change 事件 package blog.csdn.net.huangbin; import java.util.EventObject; public class FileChangedEvent extends EventObject ... { private static final long serialVersionUID = 1L; private String fileName; private long lastModifyTime; public FileChangedEvent(Object pSource) ...{ super(pSource); } public String getFileName() ...{ return fileName; } public void setFileName(String fileName) ...{ this.fileName = fileName; } public void setLastModifyTime(long lastModifyTime) ...{ this.lastModifyTime = lastModifyTime; } public long getLastModifyTime() ...{ return lastModifyTime; } } 文件Changed监听器 package blog.csdn.net.huangbin; import java.util.EventListener; public interface FileChangedListener extends EventListener ... { public void contentChanged(FileChangedEvent pEvent);} 接口 package blog.csdn.net.huangbin; public interface FileMonitor ... { public void register(String pFileName); public void register(java.util.Set pFileSet); public boolean isRegisted(String pFileName); public void unregister(String pFileName); public String[] getFiles(); public void addFileChangedListener(FileChangedListener pListener); public void removeFileChangedListener(FileChangedListener pListener); public FileChangedListener[] getFileChangedListeners(); public void start(); public void restart(); public boolean isRunning(); public int getDelay(); public void setDelay(int pDelay); } 实现 package blog.csdn.net.huangbin; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.util.HashMap; import java.util.Map; import java.util.Set; import javax.swing.Timer; import javax.swing.event.EventListenerList; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class DefaultFileMonitor implements FileMonitor, ActionListener ... { private final Log log = LogFactory.getLog(DefaultFileMonitor.class); public static final int DEFAULT_DELAY = 500; public DefaultFileMonitor()...{ monitorTimer = new Timer(DEFAULT_DELAY,this); this.start(); } private Map fileMap = new HashMap(); //执行文件改变检查. public void actionPerformed(ActionEvent e)...{ String[] files = getFiles(); for(int i=0; i<files.length; i++)...{ FileChangedEvent info = (FileChangedEvent)fileMap.get(files[i]) ; long lastModifyTime = getModifyTime(files[i]); if ( lastModifyTime > info.getLastModifyTime() )...{ info.setLastModifyTime(lastModifyTime); fireFileChangedListener(info); }//end if }//end for } public void register(String pFileName) ...{ FileChangedEvent info = new FileChangedEvent(this); long lastModifyTime = getModifyTime(pFileName); info.setFileName(pFileName); info.setLastModifyTime(lastModifyTime); fileMap.put(pFileName, info); } public void register(Set pFileSet) ...{ String[] files = (String[])pFileSet.toArray(new String[0]); for(int i=0; i<files.length; i++)...{ register(files[i]); } } public void unregister(String pFileName) ...{ fileMap.remove(pFileName); } public boolean isRegisted(String pFileName)...{ return fileMap.containsKey(pFileName); } public String[] getFiles() ...{ return (String[])fileMap.keySet().toArray(new String[0]); } public void addFileChangedListener(FileChangedListener pListener) ...{ listenerList.add(FileChangedListener.class, pListener); } public void removeFileChangedListener(FileChangedListener pListener) ...{ listenerList.remove(FileChangedListener.class, pListener); } public FileChangedListener[] getFileChangedListeners() ...{ return (FileChangedListener[])listenerList.getListeners(FileChangedListener.class); } protected void fireFileChangedListener(FileChangedEvent pEvent)...{ Object[] listeners = listenerList.getListenerList(); for (int i=listeners.length-2; i>=0; i-=2) ...{ if (listeners[i]==FileChangedListener.class) ...{ ((FileChangedListener)listeners[i+1]).contentChanged(pEvent); } } } public void start() ...{ monitorTimer.start(); } public void restart() ...{ monitorTimer.restart(); } public boolean isRunning() ...{ return monitorTimer.isRunning(); } public int getDelay() ...{ return monitorTimer.getDelay(); } public void setDelay(int pDelay) ...{ monitorTimer.setDelay(pDelay); } private long getModifyTime(String pFileName)...{ long result = 0; File aFile = null; aFile = new File(pFileName); if ( aFile.exists() == false)...{ throw new IllegalArgumentException("文件:" + pFileName + " 不存在!"); } if ( aFile.isFile() == false )...{ throw new IllegalArgumentException( pFileName + " 不是有效的文件"); } result = aFile.lastModified(); return result; } private Timer monitorTimer = null; protected EventListenerList listenerList = new EventListenerList(); public static void main(String[] args) ...{ }}