Java基础--IO流(Properties的使用-计数器)

/**
 * 获取软件运行的次数,判断是否超出使用的次数,如果超出,限制用户的登录运行.
 * 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() 
          返回此属性列表中的键集,其中该键及其对应值是字符串,如果在主属性列表中未找到同名的键,则还包括默认属性列表中不同的键。

猜你喜欢

转载自blog.csdn.net/u013251413/article/details/80813743
今日推荐