如何实现监听一个文件,如果该文件被修改会自动发送一个事件给程序?

解决方案 »

  1.   

    1.先检查文件的最后修改日期,
    2.Hash文件内容,如果Hash结果与保留的结果不一致就发出事件通知。以上功能用FileChannel读取文件,在一线程中运行,注意,在文件读取时加锁保护文件,因此,最好用NIO,因为文件属于操作系统的资源,应在操作系统级别上加锁处理。
      

  2.   

    1.先检查文件的最后修改日期,
    2.Hash文件内容,如果Hash结果与保留的结果不一致就发出事件通知。
      

  3.   

    Hash文件内容是指什么意思?如何实现?
    如果用FileChannel加锁该文件,是不是该其他进程或用户都不能修改该文件了?另外NIO是什么意思?
      

  4.   

    MessageDigest类实现Hash。
    NIO:new IO ,偷懒的话看看commons-configuration的源码,但是它的源代码质量不高。
      

  5.   

    Hash文件内容指的是什么?我还是不明白。 new IO又是指什么意思?
      

  6.   

    Hash文件内容:使用一个HashSet,HashMap或者HashTable把文件内容存储起来,以修改时间做key,
      

  7.   

    Hash文件内容指的是什么?我还是不明白。 new IO又是指什么意思?
      

  8.   

    在Java的api文档中看看MessageDigest类的说明,NIO也在api文档中,是基于缓存的IO,Java原来的IO是基于传统流模型的。
      

  9.   

    import java.io.IOException;
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpServletResponseWrapper;
    public class SessionFilter implements Filter {
         public static boolean isContains(String container, String[] regx) {
               boolean result = false;
               for (int i = 0; i < regx.length; i++) {
                     if (container.indexOf(regx[i]) != -1) {
                           return true;
                     }
               }
               return result;
         }
         public FilterConfig config;
         public void setFilterConfig(FilterConfig config) {
               this.config = config;
         }
         public FilterConfig getFilterConfig() {
               return config;
         }
         public void doFilter(ServletRequest request, ServletResponse response,
                     FilterChain chain) throws IOException, ServletException {
               HttpServletRequest httpreq = (HttpServletRequest) request;
               HttpServletResponse httpres = (HttpServletResponse) response;
               HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper(
                           (HttpServletResponse) response);
               String logonStrings = config.getInitParameter("logonStrings");
               String includeStrings = config.getInitParameter("includeStrings");
               String redirectPath = httpreq.getContextPath()
                           + config.getInitParameter("redirectPath");
               String disabletestfilter = config.getInitParameter("disabletestfilter");
               if (disabletestfilter.toUpperCase().equals("Y")) {
                     chain.doFilter(request, response);
                     return;
               }
               String[] logonList = logonStrings.split(";");
               String[] includeList = includeStrings.split(";");
               Object user = httpreq.getSession().getAttribute("userinfo");
               if (user == null) {
                     if (!this.isContains(httpreq.getRequestURI(), includeList)) {
                           chain.doFilter(request, response);
                           return;
                     }
                     if (this.isContains(httpreq.getRequestURI(), logonList)) {                       chain.doFilter(request, response);
                           return;
                     }
                     wrapper.sendRedirect(redirectPath);
               } else {
                     chain.doFilter(request, response);
               }
         }
         public void destroy() {
               this.config = null;
         }
         public void init(FilterConfig filterConfig) throws ServletException {
               this.config = filterConfig;
         }
    }
    要判断啊!
      

  10.   

    为什么要使用servlet?我的程序就是一般的application