java timer监听器_基于java.util.TimerTask定时任务定义FileMonitor文件监控器、文件监听接口及实现用于对文件修改onModifyFile事件触发处理代码示例...

一、前言

基于事件原理(事件对象、事件监听器、事件源)、java.util.TimerTask定时器任务定义文件监控器FileMonitor类,其中包括onModifyFile文件修改监听器Listener接口定义、文件内部监听容器InnerListeners实现类、文件事件源路径监听等,详情参见代码示例。

二、代码示例import java.io.File;@b@import java.util.TimerTask;@b@import java.util.concurrent.ConcurrentHashMap;@b@import java.util.concurrent.CopyOnWriteArrayList;@b@@b@public class FileMonitor extends TimerTask {@b@@b@/**@b@ * 监听器@b@ */@b@public interface Listener {@b@public void onModifyFile(File file);@b@}@b@@b@/**@b@ * 内部监听容器@b@ */@b@private static class InnerListeners {@b@public final String filePath;@b@public final CopyOnWriteArrayList listeners = new CopyOnWriteArrayList();@b@public long mdate;  @b@@b@public InnerListeners(String filePath) {@b@this.filePath = filePath;@b@File file = new File(filePath);  @b@mdate = file.exists() ? file.lastModified() : -1;  @b@}@b@@b@public void add(Listener listener) {@b@if (listener != null) {@b@listeners.add(listener);@b@}@b@}@b@@b@public void remove(Listener listener) {@b@if (listener != null) {@b@listeners.remove(listener);@b@} @b@}@b@@b@public boolean isEmpty() {@b@return listeners.isEmpty();@b@}@b@@b@public void checkModify() {@b@File file = new File(filePath);  @b@long new_mdate = file.exists() ? file.lastModified() : -1;@b@if (new_mdate != mdate) {@b@for (Listener listener : listeners) {@b@listener.onModifyFile(file);@b@}@b@mdate = new_mdate;@b@}@b@}@b@}@b@@b@/**@b@ * 文件监听器@b@ */@b@@b@private final ConcurrentHashMap listenersMap = new ConcurrentHashMap();@b@@b@public void listen(String filePath, Listener listener) {@b@InnerListeners listeners = listenersMap.get(filePath);@b@if (listeners == null) {@b@listeners = new InnerListeners(filePath);@b@listenersMap.put(filePath, listeners);@b@}@b@listeners.add(listener);@b@}@b@@b@public void unListen(String filePath, Listener listener) {@b@InnerListeners listeners = listenersMap.get(filePath);@b@if (listeners != null) {@b@listeners.remove(listener);@b@if (listeners.isEmpty()) {@b@listenersMap.remove(filePath);@b@}@b@}@b@}@b@@b@@Override@b@public void run() {@b@for (InnerListeners listeners : listenersMap.values()) {@b@listeners.checkModify();@b@}@b@}@b@@b@}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值