/**
* 獲取軟件運行的次數,判斷是否超出使用的次數,如果超出,限制用戶的登錄運行.
* 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() 返回此屬性列表中的鍵集,其中該鍵及其對應值是字符串,如果在主屬性列表中未找到同名的鍵,則還包括默認屬性列表中不同的鍵。 |