A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

/*
需求:
编写程序,用于记录程序运行的次数,如果运行的次数已到,要求用户注册会员账号;
思路:
1.根据题目需求,很容易想到计数器,可是如果计数器定义在程序中,那么该计数器会随着应用程序的退出,而从计算机内存中消失;
2.要想使程序结束,计数器的值也存在,程序启动时,先加载该计数器的值,然后加1在存储起来这就要求建立一个配置文件,专门用
   于存放记录该软件运行次数的计数器;
3.配置文件最好使用键值对,这样便于阅读,并操作数据;
4.键值对数据时存放在map集合中,数据是以文件形式存储,会使用io技术,io+map-->Properties,这样配置文件既可以共享,又方便操作;
*/
import java.io.*;
import java.util.*;
class  RunCountDemo
{
public static void main(String[] args) throws IOException
{
  runCount();
}
public static void runCount() throws IOException
{
  Properties prop=new Properties();
  //建立一个Properties集合,用于临时存放关于程序运行次数的属性信息;
  File f=new File("F:\\JAVAWORK\\day20\\runInfo.ini");
  //声明一个File对象,指向"F:\\JAVAWORK\\day20\\runInfo.ini";
//BufferedWriter bufw=new BufferedWriter(new FileWriter(f));
  //一开始这句废代码往删了,导致49行(下方的红色字体部分)的代码好像就能读一次,在运行的时候,就发现无论程序运行多少次,"F:\\JAVAWORK\\day20\\runInfo.ini"里的文件都不在更新,这是
  //怎么回事啊,???

  if (!f.exists())
  //判断File对象f指向的文件是否存在;
  {
   f.createNewFile();
   //如果不存在,中创立一个;
  }
  FileInputStream fis=new FileInputStream(f);
  //把f对象关联到输入流中;
  prop.load(fis);
  //通过Properties对象自带的方法load(),从输入流中读取属性信息;
  int count=0;
  //定义一个计数器,初始值为0;
  String value=prop.getProperty("time");
  //通过键"time",获取相对应的值;
  if (value!=null)
  {
   count=Integer.parseInt(value);
   if (count>=5)
   {
    System.out.println("您的试用期限已到,请开通会员!");
    return;
   }
  }  
  count++;
  prop.setProperty("time",count+"");
  //把相应的键值对存入到Properties集合中;
  prop.list(new PrintStream(f));
  //通过list方法,将属性信息输出到指定的输出流中,从而存入到文件中;
}
}





问题在第一处红色字体处;

2 个回复

倒序浏览
兄弟,我不知道这样说对不对啊,你首先将文件与BufferedWriter关联起来了,也就是说这时候是在写你的文件,这样的话,你的文件就无法与FileInputStream关联起来,自然而然就读不到内容,所以prop.getProperty("time");这句代码每次都返回空,所以count++永远都是1,你把BufferedWriter bufw=new BufferedWriter(new FileWriter(f));这段代码放到FileInputStream fis=new FileInputStream(f)后面去,应该就可以实现你要的效果了。
回复 使用道具 举报
兄弟,再啰嗦两句啊,BufferedWriter bufw=new BufferedWriter(new FileWriter(f));这段代码要在Properties加载了输入流中的内容之后再执行,凡是在这之前的话,就都无法达到你要的效果,这是你的全部代码吗?记得关流啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马