当前位置: 代码迷 >> Java Web开发 >> 高分:怎么知道一个文件被拷贝了多少次
  详细解决方案

高分:怎么知道一个文件被拷贝了多少次

热度:602   发布时间:2016-04-17 13:11:34.0
高分:如何知道一个文件被拷贝了多少次
情况是这样的,   在一个站点有一个文件   www.abc.com/abc/abc.xml     一个xml文件.每天有很多的程序会读取这个文件,这些程序很多,有vc写的,有其他站点jsp.等等,那么我想统计下到底我的这个abc.xml文件一天被读取了多少次,是否做的到呢?   是jsp还是java?请高手指点一二.谢谢了

------解决方案--------------------
方法比较多,都是从servlet的请求响应机制入手:
jsp,或者 servlet 都可以,但是需要指出,jsp其实就是servlet,这里用serlvet,配置到这个文件文件的url上,那么每次访问上述链接都会触发servler,计数器可以++了 ;

另外一种是filter,拦截你需要的url,简单分析一下就可以让计数器++了;

上述两种方法都是可插拔的,不想统计时从web.xml中注释掉配置即可。而filter更适合你:1、它专门为解决你的问题而存在,2、可以写更少的代码。
------解决方案--------------------
做个线程监听文件

try {
Process p=Runtime.getRuntime().exec( "cmd /c dir d:\\dictionary.txt /t:a ");
InputStream in=p.getInputStream();
StringBuffer out = new StringBuffer();
byte[] b = new byte[1024];
int n=0;

while ((n=in.read(b))!=-1){
out.append(new String(b, 0, n));
}
System.out.println(out.toString());
} catch (IOException e) {
e.printStackTrace();
}


dir d:\\dictionary.txt /t:w
dir d:\\dictionary.txt /t:c
dir d:\\dictionary.txt /t:a

试验一下这种方法,可能对你有帮助
------解决方案--------------------
LZ的问题是监听任意程序对某一文件访问吧,这个任意是指任何JAVA程序及非JAVA程序,题目的理解是不是这样?如果不是的话,下边的话就当废话吧。。。

这种问题,纯粹用JAVA不能实现。我想到的方法就是拦截winapi,因为在windows系统下无论是JVM还是其它程序,绝大部分情况下都是通过调用winapi去访问文件的,把api拦下来,记录下操作后,再执行被拦截的API。不过这个方法有个问题,可能会和某些杀软冲突
  相关解决方案