JAVA TimerTask之监听文件夹

    利用TimerTask,当web容器加载的时候初始化文件夹下的文件列表,赋给list1,当时钟进行第二次监听的时候在读出文件夹下的文件列表赋给list2,如果list2大于list1,则说明有新文件加入,然后通过文件的修改时间和web容器加载时的系统时间对比来判断是那个文件被添加进来了,从而完成了对文件夹的监听!具体代码如下:

PropertiesListener.java

/**
* 文件夹自动监听器
* @author litao
*
*/
public class PropertiesListener implements ServletContextListener {
   
    /**
     * 自动监听时钟
     */
    private final Timer timer = new Timer();
   
    /**
     * 时钟间隔周期
     */
    private final int sec = 1000*60;  
   
    /**
     * 启动服务后多久开始进行监听
     */
    private final int sec_start = 1000*30;  
   
    /**
     * 监听文件夹所在地址
     */
    private final String path = "D://test//";
   
   
public void contextInitialized(ServletContextEvent event) {
   String status = "文件夹定时监听启动.";
   event.getServletContext().log(status);
  
        // 执行自动监听计划
        timer.schedule(new PropertiesTask(path), sec_start, sec);
    }
   
    public void contextDestroyed(ServletContextEvent event) {
        String status = "文件夹定时监听停止 .";
        event.getServletContext().log(status);
       
        // 停止自动监听时钟
        timer.cancel();
    }
}

PropertiesTask .java

/**
* 自动监听任务
*
* @author litao
*
*/

@SuppressWarnings("unchecked")
public class PropertiesTask extends TimerTask {
private String path;
private File files;
private String[] list1;
private long lastModified;

/**
* 构造一个自动更新任务
*
* @param context
*/
public PropertiesTask(String path) {
   this.path = path;
   this.lastModified = System.currentTimeMillis();
   this.files = new File(path);
   if (files.isDirectory()) {
    this.list1 = files.list();
   }
}

public void run() {
   todo();
}

/**
* 监听文件夹下的文件是否被更新。
*/
private void todo() {
   if (files.isDirectory()) {
    String[] list2 = files.list();
    if (list1.length < list2.length) {
     for (int i = 0; i < list2.length; i++) {
      File file = new File(path + list2[i]);
      while (isFileUpdated(file)) {
       System.out.println(list2[i]+" 文件被更新");
       break;
      }
     }
     list1 = files.list();
    } else {
     list1 = files.list();
    }
   }else{
    System.out.println("************所监听的文件夹路径- "+path+" -不存在***********");
   }
}

/**
* 判断物理文件是否已被更新
*
* @param filename
*            物理文件名
* @return 是 true 否 false
*/
private boolean isFileUpdated(File file) {
   if (file.isFile()) {
    long lastUpdateTime = file.lastModified();
    if (lastUpdateTime > this.lastModified) {
     this.lastModified = lastUpdateTime;
     return true;
    } else {
     return false;
    }
   } else {
    return false;
   }
}
}

web.xml配置

<listener>
   <listener-class>com.PropertiesListener</listener-class>
</listener>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值