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();
}
}
|
|