公差标注最新基准标注:JAVA TimerTask之监听文件夹

来源:百度文库 编辑:偶看新闻 时间:2024/04/29 15:13:46
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 是

JAVA TimerTask之监听文件夹 2009-11-03 10:36

    利用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配置


   com.PropertiesListener

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配置


   com.PropertiesListener