实现对文件夹的监听程序没有起到监听的作用

时间:2021-07-28 21:36:50
这个工程实现 对服务器上的一个下载文件夹进行监听 ,如果文件夹里有加放新文件,和删除文件都进行会报:
工程的结构:如下图
实现对文件夹的监听程序没有起到监听的作用
文件PropertiesListener.java
package cn.ts;


import java.util.Timer;

import javax.servlet.ServletContextEvent;



public class PropertiesListener {
  private final Timer  timer=new Timer();//自动监听时钟
  private final int sec=1000;//时间间隔周期
  private final int sec_start=1000;//启动服务后多久开始进行监听
  private final String path="d://123//";
  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
package cn.ts;

import java.io.File;
import java.util.TimerTask;
public class PropertiesTask extends TimerTask{
private String path;
private File files;
private String[]list1;
private long lastModifiled;
   //构造一个自动更新服务
public PropertiesTask(String path){
this.path =path;
this.lastModifiled=System.currentTimeMillis();
this.files=new File(path);
if(files.isDirectory()){
this.list1=files.list();
}
}

@Override
public void run() {
// TODO Auto-generated method stub
todo();
}
 /**
  * 监听文件夹的文件是否被 更新
  */
private void todo(){
if(files.isDirectory()){
String []list2=files.list();
int i;
if(list1.length<list2.length){
for( 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{
System.out.println("********所监听的文件路径-"+path+"********");
}
}
/**
 * 判断物理文件是否已更新
    */
private boolean isFileUpdated(File file){
if(file.isFile()){
long lastUpdateTime=file.lastModified();
if(lastUpdateTime>this.lastModifiled){
this.lastModifiled=lastUpdateTime;
return true;
}else{
return false;
}
}else{
return false;
}
}
}

在web.xml中的配置 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name></display-name>
  <listener>
  <listener-class>cn.ts.PropertiesListener</listener-class>
  </listener>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>
在D盘中的文件夹
实现对文件夹的监听程序没有起到监听的作用
启动了tomcat我在文件夹中进行操作可是一点反应都 没有,各位大侠帮忙一下。是不是我那写错了。请给与点拨。不胜感激。

5 个解决方案

#1


if(list1.length<list2.length){
这句话
如果文件没删除,不会成立的

#2


引用 1 楼 game4daniel 的回复:
if(list1.length<list2.length){
这句话
如果文件没删除,不会成立的

应该判断:
if(长度不等)
    //直接返回有修改
else
    // 每个文件比较

#3


亲,要比名称,md5值什么的

#4


肯定是
名称

#5


我改了但是没反应啊

#1


if(list1.length<list2.length){
这句话
如果文件没删除,不会成立的

#2


引用 1 楼 game4daniel 的回复:
if(list1.length<list2.length){
这句话
如果文件没删除,不会成立的

应该判断:
if(长度不等)
    //直接返回有修改
else
    // 每个文件比较

#3


亲,要比名称,md5值什么的

#4


肯定是
名称

#5


我改了但是没反应啊