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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

package cn.com.propertiesdemo;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;


/**
* 定义功能:获取一个应用程序运行的次数,如果超过5次,给出使用次数已到,并不要再运行程序
* 思路:
* 1.应该有计数器
* 每次程序启动都需要计数一次,并且在原有懂得次数上计数。
* 2.我们需要多次启动同一个应用程序,使用同一个计数器,计数器生命周期变长
* 将计数器从内存存储到硬盘文件中
* 3.如何使用计数器?
*  首先,程序启动时,应该先读取这个用于记录计数器的配置文件
*  获取上一次计数器次数,并进行试用次数的判断
*  其次,对次数进行自增,并将自增后的次数重新存储到配置文件中
* 4.文件中的信息如何进行存储并体现
*         直接存储此数值可以,但是不明确数据得含义,所以起名字就很重要
*  名字与值得对应,可以使用键值对
*  
*  映射关系可以用集合MAP搞定,又需要读取硬盘上的数据,所以map+io=properties
* @author Administrator
*
*/
public class Demo_6 {


        public static void main(String[] args) throws IOException {
                getAppCount();


        }
        public static void getAppCount() throws IOException{
                //将配置文件封装成File对象
                File confile=new File("count.properties");
               
                //判断是否有文件,如果没有就创建新的文件
                if(!confile.exists()){
                        confile.createNewFile();
                }
               
                //创建字节读取流对象,并与指定文件相关联(以上的操作使得字节流读取时一定有文件)
                FileInputStream fis=new FileInputStream(confile);
               
                //创建一个Properties集合对象
                Properties pop=new Properties();
               
                //调用load()方法从输入流(字节读取流)中读取属性列表(键值对信息,也称为键与元素的信息)
                pop.load(fis);
               
                //从集合中通过键来获取次数(即键所对的值)
                String value=pop.getProperty("time");
               
                //定义计数器,记录获取到的次数(因为是运算,给count初始化值)
                int count=0;
                if(value!=null){
                        count=Integer.parseInt(value);
                        //使用次数达到5次时,
                        if(count>=5){
                                throw new RuntimeException("请购买正版软件,试用次数已经达到5次!");
                        }
                }
                count++;
               
                //将变化后的次数重新存储到集合中
                //Integer.toString(count)与count+""都是将数值转换成字符串
                pop.setProperty("time",Integer.toString(count) );
               
                //将集合中的键值对信息写到配置文件中,持久化存储,创建一个字节写出流对象,并与指定文件相关联
                FileOutputStream fos=new FileOutputStream(confile);
               
               
                pop.store(fos, "time+counts");
               
                fis.close();
                fos.close();
        }


}


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马