JavaWeb中的IO流路径问题

问题:最近在学习如何给网站添加点击量和同时在线人数.在不利用数据库存储点击量的前提下,长期保存一个数据(包括服务器关闭时)使用原生的IO流是很简便的.

在这里插入图片描述

想法很简单,在实现IO流的iListener类同路径下创建一个txt文本来保存点击量.所以当时代的代码就这么写了.

String s = "";
BufferedReader br = null;
        try {//读取主页的点击率
            br = new BufferedReader(new FileReader("clickNum.txt"));
            s = br.readLine();
            System.out.println("读取到的数据-->"+s);
            int i = Integer.parseInt(s);
            sce.getServletContext().setAttribute("clickNum",i);
        } catch (Exception e) {
            e.printStackTrace();
        }

看起来没什么毛病,相对路径下直接写文件名就可以调用
但是int i = Integer.parseInt(s);这一行一直报错,使用readLine()取得是null…

由于想自己搞明白,没在网上搜,我一直以为是字符集的问题,但搞了半天还是回到了utf-8.

又觉得跟多线程有关.以为在readline还没执行完的时候就直接调用s的值了.但后来想想不可能,因为这样设计简直是反人类.


百度了一下后,发现是路径问题,在项目发布后本来的相对地址失效了,直接写文件名其实是在根目录下查找,所以一直取null

改进了代码后,这个问题就解决了

String s = "";
        BufferedReader br = null;
        try {//读取主页的点击率
            String filePath = sce.getServletContext().getRealPath("/WEB-INF/classes/Listener/clickNum.txt");
            br = new BufferedReader(new FileReader(filePath));//读取classes文件夹下的文件
            s = br.readLine();
            System.out.println("读取到的数据-->"+s);
            int i = Integer.parseInt(s);
            sce.getServletContext().setAttribute("clickNum",i);
        } catch (Exception e) {
            e.printStackTrace();
        }

通过这个过程我发现我还是太年轻,一直觉得是个小问题很快就能解决,但是我错了.
感悟如下
1 平常的学习中,会遗漏很多的细节,同样的代码换个环境就很可能会出bug.不要总以为是对的就是对的.
2 学习不能过于钻牛角尖,要有目的性,比如我浪费了一两个小时来找bug,不如直接用一两分钟找度娘.有时候自己写的bug可能是别人根本不会犯的低级错误.
3 不能一口吃个大胖子,很多新知识都应该取认真的剖析,踏踏实实地学习.
4 不要以为自己走了许多弯路,离成功还很遥远,说不定这才是抵达成功真正的捷径.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值