zoukankan      html  css  js  c++  java
  • 文件监听FileMonitor

    public class FileMonitor {
        
        private static final Logger logger = Logger.getLogger(FileMonitor.class);
        private static FileMonitor instance = null;
        private Timer timer;
        private Map<String, TimerTask> timerEntries;
        
        public FileMonitor() {
            timer = new Timer(true);
            timerEntries = new HashMap<String, TimerTask>();
        }
    
        public static FileMonitor getInstance() {
            if (instance == null) {
                instance = new FileMonitor();
            }
            return instance;
        }
        
        public void cancel() 
        {
            try {
                if (timer != null) {
                    timer.cancel();
                }
            } catch(Exception e) {
                e.printStackTrace();
            }
        }
    
        public void addFileChangeListener(FileChangeListener listener,
                String filename, long period) {
            logger.info("开始进行监听文件名[" + filename + "]");
            this.removeFileChangeListener(filename);        
            FileMonitorTask task = new FileMonitorTask(listener, filename);        
            this.timerEntries.put(filename, task);
            this.timer.schedule(task, period, period);
        }
    
        public void removeFileChangeListener(String filename) {
            FileMonitorTask task = (FileMonitorTask) timerEntries.get(filename);
            if (task != null) {
                task.cancel();
            }
        }
    
        private static class FileMonitorTask extends TimerTask {
            private FileChangeListener listener;
            private String filename;
            private File monitorFile;
            private long lastModified;
    
            public FileMonitorTask(FileChangeListener listener, String filename) {
                this.listener = listener;
                this.filename = filename;
                this.monitorFile = new File(filename);
                if (!this.monitorFile.exists()) {
                    return;
                }
                this.lastModified = this.monitorFile.lastModified();
            }
    
            @Override
            public void run() {
                long latestChange = this.monitorFile.lastModified();
                if (latestChange != this.lastModified) {
                    this.lastModified = latestChange;                
                    this.listener.fileChanged(this.filename);
                }
            }
        }
    
  • 相关阅读:
    应用实例:用户登录(2009.10.23)
    ASP.NET学习笔记:服务器控件 (2009.11.9)
    小实例:模拟电话簿
    用Iframe实现左边TreeView导航,右边显示相应内容的布局
    HTML&CSS&JaveScript学习笔记(2009.11.19)
    C#中问号(?)的用法
    GridView的简单分页等
    GridView正反双向排序
    代码理解(2009.11.20)
    ASP.NET学习笔记:数据库操作 (2009.11.10)
  • 原文地址:https://www.cnblogs.com/xsmhero/p/2882018.html
Copyright © 2011-2022 走看看