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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄蒙 中级黑马   /  2015-8-21 09:04  /  315 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄蒙 于 2015-8-21 09:11 编辑
  1. import java.io.*;
  2. import java.util.*;

  3. /**
  4. * 需求:定义配置文件,使得本程序只能打开并使用5次,第6次则弹出“使用次数用完”;
  5. *
  6. * 思路:定义配置文件,这个文件是写入在硬盘上的,每次启动程序时调用读取,其保存的形式应该是以键值对的形式
  7. *
  8. * 键值对的保持离不开map而文件写入写出离不开输入输出流,可以使用输入输出流与map中的桥梁Properties
  9. *
  10. * 源;硬盘文件                                  中介 内存                    目的:硬盘文件
  11. * 输入流对象:FileInputStream       中介  Properties         输出流对象:FileOutputStream
  12. *
  13. * */
  14. public class SoftwareCount {

  15.         public static void main(String[] args) throws IOException
  16.         {
  17.                 // TODO Auto-generated method stub
  18.                 Properties pro = new Properties();//
  19.                 File file = new File("F:\\Properties.ini");
  20.                 if(!file.exists())
  21.                 {
  22.                         file.createNewFile();
  23.                 }
  24.                
  25.                 /*BufferedInputStream bfr =
  26.                                 new BufferedInputStream(new FileInputStream(file));
  27.                 BufferedOutputStream bfw =
  28.                                 new BufferedOutputStream(new FileOutputStream(file));*/
  29.                 FileInputStream bfr = new FileInputStream(file);
  30.                 FileOutputStream bfw = new FileOutputStream(file);/**/
  31.                
  32.                
  33.                 pro.load(bfr);//Debug出来每次执行到这一句就会重新建立一个空的配置文件
  34.                 String value=pro.getProperty("time");

  35.                 int count=0;
  36.                 if(value!=null)
  37.                 {
  38.                         count = Integer.parseInt(value);
  39.                         if(count>=5)
  40.                         {
  41.                                 System.out.println("使用次数已用完");
  42.                                 return ;
  43.                         }
  44.                 }
  45.                 count++;
  46.                
  47.                 pro.setProperty("time", count+"");
  48.                 pro.store(bfw,"");
  49.                
  50.                 bfr.close();
  51.                 bfw.close();
  52.                
  53.         }

  54. }
复制代码


我也不知道为什么了,明明跟着老师一起做的。。这个语句就是有问题啊。。

点评

pro.load(bfr);//Debug出来每次执行到这一句就会重新建立一个空的配置文件  发表于 2015-8-21 09:08

5 个回复

倒序浏览
本帖最后由 Cancer 于 2015-8-21 09:34 编辑

好吧,我测试好久我也不太清楚了
回复 使用道具 举报
Cancer 发表于 2015-8-21 09:20
好吧,我测试好久我也不太清楚了

感觉真是见鬼了- -
回复 使用道具 举报
本帖最后由 pengbeilin 于 2015-8-21 10:07 编辑

哥们给你看下我写的吧~  和你的比对下 感觉好像差不多~ 还是以前看视频的时候写的。 运行5次就提示。
  1. import java.io.*;
  2. import java.util.*;
  3. class demo06
  4. {
  5.         public static void main(String[] args) throws IOException
  6.         {
  7.                 File f = new File("propertise.ini");//建立文件对象
  8.                 if(!f.exists())
  9.                         f.createNewFile();
  10.                 Properties pro = new Properties();//建立集合
  11.                 FileInputStream fis = new FileInputStream(f);//读取io流               
  12.                 pro.load(fis);//把文件里面的键值对拿出来放到集合中
  13.                
  14.                 int count = 0;
  15.                 String v = pro.getProperty("time");//获取time键的值 如果没有返回null               
  16.                 if(v!=null)//如果不为空的话
  17.                 {
  18.                         count = Integer.parseInt(v);//就取出time的值,把值从字符串转换成int
  19.                         if(count>=5)//判断
  20.                         {
  21.                                 System.out.println("您的余额已不足,请及时充值!");
  22.                                 return;
  23.                         }        
  24.                 }
  25.                 count++;//程序每运行一次,次数+1
  26.                 pro.setProperty("time",count+"");//把键和值又 存入集合中
  27.                 FileOutputStream fos = new FileOutputStream(f);
  28.                 pro.store(fos,"");

  29.                 fis.close();
  30.                 fos.close();
  31.         }
  32. }
复制代码
回复 使用道具 举报
好像是昨天,我也碰到这个情况,弄了小半天,对着视频一句句代码改,才发现问题出在哪。具体就是初始化的时候,properties对象要加载之前再初始化InputStream/Writer,然后要写入的时候再初始化out/writer。
至于为什么,我就不知道了。楼主要是最后知道了,望一定通知我一下。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马