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  Propertiesdefaults 
          一個屬性列表,包含屬性列表中所有未找到值的鍵的默認值。
構造方法摘要
Properties() 
          創建一個無默認值的空屬性列表。
Properties(Properties defaults) 
          創建一個帶有指定默認值的空屬性列表。
方法摘要
 StringgetProperty(String key) 
          用指定的鍵在此屬性列表中搜索屬性。
 StringgetProperty(String key, String defaultValue) 
          用指定的鍵在屬性列表中搜索屬性。
 voidlist(PrintStream out) 
          將屬性列表輸出到指定的輸出流。
 voidlist(PrintWriter out) 
          將屬性列表輸出到指定的輸出流。
 voidload(InputStream inStream) 
          從輸入流中讀取屬性列表(鍵和元素對)。
 voidload(Reader reader) 
          按簡單的面向行的格式從輸入字符流中讀取屬性列表(鍵和元素對)。
 voidloadFromXML(InputStream in) 
          將指定輸入流中由 XML 文檔所表示的所有屬性加載到此屬性表中。
 Enumeration<?>propertyNames() 
          返回屬性列表中所有鍵的枚舉,如果在主屬性列表中未找到同名的鍵,則包括默認屬性列表中不同的鍵。
 voidsave(OutputStream out, String comments) 
          已過時。 如果在保存屬性列表時發生 I/O 錯誤,則此方法不拋出 IOException。保存屬性列表的首選方法是通過 store(OutputStream out, String comments) 方法或 storeToXML(OutputStream os, String comment) 方法來進行。
 ObjectsetProperty(String key, String value) 
          調用 Hashtable 的方法 put
 voidstore(OutputStream out, String comments) 
          以適合使用 load(InputStream) 方法加載到 Properties 表中的格式,將此 Properties 表中的屬性列表(鍵和元素對)寫入輸出流。
 voidstore(Writer writer, String comments) 
          以適合使用 load(Reader) 方法的格式,將此 Properties 表中的屬性列表(鍵和元素對)寫入輸出字符。
 voidstoreToXML(OutputStream os, String comment) 
          發出一個表示此表中包含的所有屬性的 XML 文檔。
 voidstoreToXML(OutputStream os, String comment, String encoding) 
          使用指定的編碼發出一個表示此表中包含的所有屬性的 XML 文檔。
 Set<String>stringPropertyNames() 
          返回此屬性列表中的鍵集,其中該鍵及其對應值是字符串,如果在主屬性列表中未找到同名的鍵,則還包括默認屬性列表中不同的鍵。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章