黑马程序员技术交流社区

标题: 统计程序使用次数遇到的问题 [打印本页]

作者: Jaybor    时间: 2015-4-4 12:03
标题: 统计程序使用次数遇到的问题
本帖最后由 Jaybor 于 2015-4-4 12:06 编辑

毕老师的一个视频,里面讲的是统计程序运行次数,当次数超过一定值后就禁止程序的运行:
  1. import java.io.*;
  2. import java.util.Properties;

  3. public class IOTest
  4. {
  5.         public static void main(String[] args) throws Exception
  6.         {
  7.                 Properties pro=new Properties();
  8.                 File f=new File("c:/logging.txt");

  9.                 if(!f.exists())
  10.                         f.createNewFile();
  11.                 FileInputStream input=new FileInputStream(f);
  12.                
  13.                 //PrintStream ps=new PrintStream(f);A
  14.                 pro.load(input);
  15.                 PrintStream ps=new PrintStream(f)//B
  16.                 int count=0;
  17.                 String value=pro.getProperty("time");
  18.                
  19.                 if(value!=null)
  20.                 {
  21.                         count=Integer.parseInt(value);
  22.                         if(count>=5)
  23.                         {
  24.                                 System.out.println("付钱吧,骚年");
  25.                                 return;
  26.                         }
  27.                 }
  28.                 count++;
  29.                 pro.setProperty("time", count+"");
  30.                
  31.                 //PrintStream ps=new PrintStream(f);C
  32.                
  33.                 pro.store(ps,"");
  34.                 ps.close();
  35.                 input.close();
  36.                
  37.                
  38.         }
  39. }
复制代码


然后问题来了:输出流在A、B、C三个位置上居然有不同的效果,有大神指导下这是为什么吗?


作者: z47057554    时间: 2015-4-4 14:40
本帖最后由 z47057554 于 2015-4-4 14:43 编辑

我测试了一下程序,根据测试结果我说下自己的看法:
结果:
A处:文件中刚开始没有数据,之后无效运行多少次文件中 time=1
B处:文件能正常写入次数,但到达5次后文件中会没有内容,程序自动重新开始计数
C处:正常计数

原因:
首先说下B和C,它们不同是因为当count都达到5时,再次运行程序的时候,在结束之前若B处存在,则将ps与文件关联,而它关联的方式是创建新文件,也意味着,文件中的内容变成了跟刚开始一样,是null,所以循环重新开始,而C处正常是因为在count达到5后,程序执行不到创建ps,所以文件不会被清空。

接下来说下,A处结果的原因:上面已经说到创建ps关联文件时会把文件清空,ps在load之前创建,那么每次load的内容,加载进内存的都为空值,所以count只会在0和1间转,不可能达到程序次数结束条件





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2