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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴刚 中级黑马   /  2013-6-9 00:10  /  1357 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 吴刚 于 2013-6-9 22:29 编辑
import java.io.*;
import java.util.*;
class RunCount
{
public static void main(String[] args) throws IOException
{
Properties prop = new Properties();

File file = new File("count.ini");
if(!file.exists())
file.createNewFile();

FileInputStream fis = new FileInputStream(file);

prop.load(fis);


int count = 0;
String value = prop.getProperty("time");

if(value!=null)
{
count = Integer.parseInt(value);
if(count>=5)
{
System.out.println("您好,使用次数已到,拿钱!");
return ;
}

}

count++;

prop.setProperty("time",count+"");

FileOutputStream fos = new FileOutputStream(file);

prop.store(fos,"");

fos.close();
fis.close();

}
}
我看了老毕的视频,然后自己敲了一遍,发现自己把标注的那个代码放在了前面几行,结果就不能计数了,把它移到下面又可以了?怎么回事???
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
public class CountDemo1 {
/**
  * @param args
  * @throws Exception
  */
public static void main(String[] args) throws Exception {
  // TODO Auto-generated method stub
  Properties prop = new Properties();
  File file = new File("c:\\b.txt");
  if (!file.exists()) {
   file.createNewFile();
  }
  
  FileInputStream fis = new FileInputStream(file);
  prop.load(fis);
  int count = 0;
  prop.setProperty("time", count+"");
  String value = prop.getProperty("time");
  if (value != null) {
   count = Integer.parseInt(value);
   if (count>=5) {
    System.out.println("软件到期了");
    return;
   }
   
  }
  count++;
  FileOutputStream fos = new FileOutputStream(file);
  prop.store(fos, "hahhaha");
  fis.close();
  fos.close();
}
}

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

6 个回复

倒序浏览
本帖最后由 张歆明 于 2013-6-9 00:58 编辑

放在后面几行:
count++;
prop.setProperty("time",count+"");//内存中更新
。。。
prop.store(fos,"");//内存中的更新持久化到和流fos关联的文件中
这个能计数  原因就是  你看到没  count已经自增1  这个时候 又一次把更新的值写到集合prop中
最后持久化到文件系统中 肯定正确

但是 现在
prop.load(fis);
  int count = 0;
  prop.setProperty("time", count+"");
//后面又是一顿操作
//最后
count++;
FileOutputStream fos = new FileOutputStream(file);
prop.store(fos, "hahhaha");
你想啊 你的count一设置为0  你就着急把他写到prop中
以后的操作虽然没有改变 但是  count的值更新了  你却没有把他更新到prop中 prop中保存的一直是最开始的0所以 每次操作完  都白费了  记录的是count的初始值0  所以 计数器失效
因为 你只有把更新的count写入prop中  与prop的store方法才能把count的值持久化
到文件中

其实 思路就是  利用prop把文件的time值取出来 取到我的prop集合中(原因就是这个集合是key-value的 并且能和输入输出流关联)
取出来之后 我要更新这个time的值(通过count来体现)
更新完之后 要把这个值更新到prop这个集合中去
这时候 prop的store方法就能把集合prop中的数据持久化到与prop关联的文件中

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
如果没有加分的大家给我留言
回复 使用道具 举报
楼主你好  如果帖子的问题已经解决,请把帖子的类型改为“已解决”。{:soso_e102:}
回复 使用道具 举报
楼主你把prop.setProperty("time",count+"");放在前面它肯定不能计数,因为每次加载的时候,int count = 0;然后运行prop.setProperty("time",count+"");

结果你在硬盘上的count数值还是0,每次都是0,后面的count++根本就在做无所谓的动作。
回复 使用道具 举报
谢谢楼上几位......
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马