如何监听一个文件 如何实现监听一个文件,如果该文件被修改会自动发送一个事件给程序? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1.先检查文件的最后修改日期,2.Hash文件内容,如果Hash结果与保留的结果不一致就发出事件通知。以上功能用FileChannel读取文件,在一线程中运行,注意,在文件读取时加锁保护文件,因此,最好用NIO,因为文件属于操作系统的资源,应在操作系统级别上加锁处理。 1.先检查文件的最后修改日期,2.Hash文件内容,如果Hash结果与保留的结果不一致就发出事件通知。 Hash文件内容是指什么意思?如何实现?如果用FileChannel加锁该文件,是不是该其他进程或用户都不能修改该文件了?另外NIO是什么意思? MessageDigest类实现Hash。NIO:new IO ,偷懒的话看看commons-configuration的源码,但是它的源代码质量不高。 Hash文件内容指的是什么?我还是不明白。 new IO又是指什么意思? Hash文件内容:使用一个HashSet,HashMap或者HashTable把文件内容存储起来,以修改时间做key, Hash文件内容指的是什么?我还是不明白。 new IO又是指什么意思? 在Java的api文档中看看MessageDigest类的说明,NIO也在api文档中,是基于缓存的IO,Java原来的IO是基于传统流模型的。 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; }}要判断啊! 为什么要使用servlet?我的程序就是一般的application JComboBox中添加适当的监听器 freeMemory返回的是heap上还未使用的空间吗? 大家帮我看下这个SQL语句该怎么写啊!高手来 如何用swt在它的Browser中画图? 如何使用try及catch 如何利用Java实现和Windows完全相同的文件打开/保存对话框 为什么我把class文件都用jar.exe打包成jar文件,双击文件但不能运行? A接口需要B接口进行实例化操作 package的使用 jdk1。3 初学java JNDI的具体用法??? 在JSP网页中 如何使用APPLET! 请看过Thinking in java的请指点
2.Hash文件内容,如果Hash结果与保留的结果不一致就发出事件通知。以上功能用FileChannel读取文件,在一线程中运行,注意,在文件读取时加锁保护文件,因此,最好用NIO,因为文件属于操作系统的资源,应在操作系统级别上加锁处理。
2.Hash文件内容,如果Hash结果与保留的结果不一致就发出事件通知。
如果用FileChannel加锁该文件,是不是该其他进程或用户都不能修改该文件了?另外NIO是什么意思?
NIO:new IO ,偷懒的话看看commons-configuration的源码,但是它的源代码质量不高。
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;
}
}
要判断啊!