情况是这样的, 在一个站点有一个文件 www.abc.com/abc/abc.xml  一个xml文件.每天有很多的程序会读取这个文件,这些程序很多,有vc写的,有其他站点jsp.等等,那么我想统计下到底我的这个abc.xml文件一天被读取了多少次,是否做的到呢? 是jsp还是java?请高手指点一二.谢谢了

解决方案 »

  1.   

    1写一text文件里面初始值为0,每次读取xml文件的时候就把text中的0加一位.
    2读取text的时候加一节点,专门负责记录读取次数.
    3数据库写一字段用来存储数量,当程序读取xml的时候加1位.
    因为有不同程序读取xml,所以必须有一中间文件记录.
      

  2.   

    统计你的服务器日志访问文件不就可以吗。java写一个后台服务线程,在日志文件中
    查找www.abc.com/abc/abc.xml相关访问纪录,例如 post /abc/abc.xml等。
    统计出访问纪录个数,不就是你的文件被访问次数吗?
      

  3.   

    但是我找遍了tomcat里面的日志,就是没有访问记录呀.怎么回事?
      

  4.   

    方法比较多,都是从servlet的请求响应机制入手:
    jsp,或者 servlet 都可以,但是需要指出,jsp其实就是servlet,这里用serlvet,配置到这个文件文件的url上,那么每次访问上述链接都会触发servler,计数器可以++了 ;另外一种是filter,拦截你需要的url,简单分析一下就可以让计数器++了;上述两种方法都是可插拔的,不想统计时从web.xml中注释掉配置即可。而filter更适合你:1、它专门为解决你的问题而存在,2、可以写更少的代码。
      

  5.   

    请问具体怎么操作??? 
    到底是如何写jsp,才能监控这个abc.xml被读取了呢?
      

  6.   

    做个线程监听文件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试验一下这种方法,可能对你有帮助
      

  7.   

    LZ的问题是监听任意程序对某一文件访问吧,这个任意是指任何JAVA程序及非JAVA程序,题目的理解是不是这样?如果不是的话,下边的话就当废话吧这种问题,纯粹用JAVA不能实现。我想到的方法就是拦截winapi,因为在windows系统下无论是JVM还是其它程序,绝大部分情况下都是通过调用winapi去访问文件的,把api拦下来,记录下操作后,再执行被拦截的API。不过这个方法有个问题,可能会和某些杀软冲突