/**
* 获取软件运行的次数,判断是否超出使用的次数,如果超出,限制用户的登录运行.
* 1.计算器。
* 2.需要配置文件信息。
* 3.启动是获取配置文件信息。
* 4.自增、并判断。
*/
public class SoftwareCountDemo {
public static void main(String[] args) throws IOException {
start();
}
private static void start() throws IOException {
//获取运行时的系统属性
Properties prs = System.getProperties();
//创建file文件io流
File fe = new File("softwareCount.in");
//创建hashtable集合中Properties集合操作数据。
Properties pes = new Properties();
//如果配件文件不存在,就创建一个配置文件。
if(!fe.exists()){
fe.createNewFile();
}
//获取读入流
FileReader fr = new FileReader(fe);
BufferedReader bfr = new BufferedReader(fr);
//将io流中的数据加载到Properties对象中
pes.load(bfr);
//根据键获取次数
String counts = pes.getProperty("count");
int count = 0;
if(counts != null ){
count = Integer.parseInt(counts);
if(count>3){
throw new RuntimeException("软件试用次数已经到达,请注册正式版本!");
}else{
pes.list(System.out);
count++;
}
}
//生成新的次数。
pes.setProperty("count",Integer.toString(count));
//系统账户
pes.setProperty("user.name", prs.getProperty("user.name"));
pes.setProperty("os.name", prs.getProperty("os.name"));
//将Properties集合中修改的数据,通过io流存储在硬盘
FileWriter fw = new FileWriter(fe);
//替换目标文件重新生成新的文件。
pes.store(fw, "conts");
bfr.close();
fw.close();
}
}
运行结果:
1.-- listing properties --
user.name=DEl-01
count=1
os.name=Windows 10
2.Exception in thread "main" java.lang.RuntimeException: 软件试用次数已经到达,请注册正式版本!
at com.io.demo.SoftwareCountDemo.start(SoftwareCountDemo.java:46)
at com.io.demo.SoftwareCountDemo.main(SoftwareCountDemo.java:20)
java.util
类 Properties
java.lang.Object |--java.util.Dictionary<K,V> |--java.util.Hashtable<Object,Object> |--java.util.Properties
字段摘要 | |
---|---|
protected Properties |
defaults 一个属性列表,包含属性列表中所有未找到值的键的默认值。 |
构造方法摘要 | |
---|---|
Properties() 创建一个无默认值的空属性列表。 |
|
Properties(Properties defaults) 创建一个带有指定默认值的空属性列表。 |
方法摘要 | |
---|---|
String |
getProperty(String key) 用指定的键在此属性列表中搜索属性。 |
String |
getProperty(String key, String defaultValue) 用指定的键在属性列表中搜索属性。 |
void |
list(PrintStream out) 将属性列表输出到指定的输出流。 |
void |
list(PrintWriter out) 将属性列表输出到指定的输出流。 |
void |
load(InputStream inStream) 从输入流中读取属性列表(键和元素对)。 |
void |
load(Reader reader) 按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)。 |
void |
loadFromXML(InputStream in) 将指定输入流中由 XML 文档所表示的所有属性加载到此属性表中。 |
Enumeration<?> |
propertyNames() 返回属性列表中所有键的枚举,如果在主属性列表中未找到同名的键,则包括默认属性列表中不同的键。 |
void |
save(OutputStream out, String comments) 已过时。 如果在保存属性列表时发生 I/O 错误,则此方法不抛出 IOException。保存属性列表的首选方法是通过 store(OutputStream out, String comments) 方法或 storeToXML(OutputStream os, String comment) 方法来进行。 |
Object |
setProperty(String key, String value) 调用 Hashtable 的方法 put 。 |
void |
store(OutputStream out, String comments) 以适合使用 load(InputStream) 方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。 |
void |
store(Writer writer, String comments) 以适合使用 load(Reader) 方法的格式,将此 Properties 表中的属性列表(键和元素对)写入输出字符。 |
void |
storeToXML(OutputStream os, String comment) 发出一个表示此表中包含的所有属性的 XML 文档。 |
void |
storeToXML(OutputStream os, String comment, String encoding) 使用指定的编码发出一个表示此表中包含的所有属性的 XML 文档。 |
Set<String> |
stringPropertyNames() 返回此属性列表中的键集,其中该键及其对应值是字符串,如果在主属性列表中未找到同名的键,则还包括默认属性列表中不同的键。 |