1.繼承關係java
java.lang.Object安全
繼承者 java.util.Dictionary<K,V>ide
繼承者 java.util.Hashtable<Object,Object>spa
繼承者 java.util.Properties線程
2.特性對象
Properties繼承
1.繼承與Hashtable,因此是線程安全的鍵值對存儲結構ci
2.可保存在流中或從流中加載字符串
3.不一樣於Hashtable,Hashtable可保存object對象的鍵值對,Properties只能保存字符串類型的鍵值對get
3.經常使用方法:
setProperty(String key, String value) 調用 Hashtable 的方法 put。
getProperty(String key, String defaultValue) 用指定的鍵在屬性列表中搜索屬性。
list(PrintWriter out) 將屬性列表輸出到指定的輸出流
load(Reader reader) 按簡單的面向行的格式從輸入字符流中讀取屬性列表(鍵和元素對)。
store(Writer writer, String comments) 以適合使用 load(Reader) 方法的格式,將此 Properties 表中的屬性列表(鍵和元素對)寫入輸出字符
4.實際使用
在src目錄下,建立一個prop.properties文件,裏面寫上key=value的鍵值對數據,而後進行load加載,好比jdbc信息
代碼1:設置和獲取key-value
import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.Properties; import java.util.Set; public class Main_Properties { public static void main(String[] args) { Properties prop=new Properties(); prop.setProperty("name", "張三"); prop.setProperty("age" , "10"); System.out.println(prop); /** * 輸出: * {age=10, name=張三} * */ String name=prop.getProperty("name"); String age =prop.getProperty("age"); String id =prop.getProperty("id"); System.out.println("name : "+name+",age :"+age+",id : "+id); /** * 輸出 * name : 張三,age :10,id : null * */ PrintWriter pw=null; try { pw=new PrintWriter(new FileWriter("E:/0326.txt"),true); Set<Object> set=prop.keySet(); for(Object obj:set) { String key = (String) obj; String value = prop.getProperty(key); pw.println(key+":"+value); /** * 文件中輸出內容 * 1 age:10 * 2 name:張三 * 3 會多出一行空行,pw.println致使 * */ } } catch (IOException e) { System.out.println("【異常】: IO錯誤"); } finally { if(pw!=null) { pw.close(); } } System.out.println("end"); } }
代碼2:寫入文件中
import java.io.FileNotFoundException; import java.io.PrintWriter; import java.util.Properties; public class Main_Properties_List { public static void main(String[] args) { Properties prop=new Properties(); prop.setProperty("name", "張三"); prop.setProperty("age" , "10"); PrintWriter pw=null; try { pw=new PrintWriter("E:/0326_2.txt"); prop.list(pw); /** * 文件寫入內容,默認間隔符是等號 * 1 -- listing properties -- * 2 age=10 * 3 name=張三 * 4 <多出一行空行> * */ } catch (FileNotFoundException e) { System.out.println("【異常】:未找到文件"); } finally { if(pw!=null) { pw.close(); } } System.out.println("end"); } }
代碼3:從文件中加載屬性
import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.Properties; public class Main_Properties_Load { public static void main(String[] args) { Properties prop=new Properties(); FileReader fr =null; try { fr =new FileReader("E:/1.txt"); /** * 文件內容 * name=www * age=30 * city@大連 <這行使用的不是默認標準的分隔符> * daxue:工大 <這行使用的不是默認標準的分隔符> * */ prop.load(fr); String name =prop.getProperty("name"); String age =prop.getProperty("age"); String city =prop.getProperty("city"); String daxue=prop.getProperty("daxue"); System.out.println("name="+name+",age="+age+",city="+city+",daxue="+daxue); /** * <輸出內容> * name=www,age=30,city=null,daxue=工大 * */ } catch (FileNotFoundException e) { System.out.println("【異常】文件未找到"); } catch (IOException e) { System.out.println("【異常】IO"); } finally { if(fr!=null) { try { fr.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
代碼4:帶註釋存儲到文件中
import java.io.FileWriter; import java.io.IOException; import java.util.Properties; public class Main_Properties_Store { public static void main(String[] args) { Properties prop=new Properties(); prop.setProperty("name", "張三"); prop.setProperty("age" , "10"); FileWriter fw=null; try { fw=new FileWriter("E:/0326_3.txt"); prop.store(fw, "這裏是註釋"); /** * 文件寫入內容 * 1 #\u8FD9\u91CC\u662F\u6CE8\u91CA 這行是"這裏是註釋" * 2 #Mon Mar 26 20:53:18 CST 2018 這行是自動生成的時間 * 3 age=10 * 4 name=張三 * 5 <多出一行空行> * */ } catch (IOException e) { System.out.println("【異常】IO"); } finally { if(fw!=null) { try { fw.close(); } catch (IOException e) { e.printStackTrace(); } } } System.out.println("end"); } }