Properties類

1.繼承關係

java.lang.Object

  繼承者 java.util.Dictionary<K,V>

      繼承者 java.util.Hashtable<Object,Object>

          繼承者 java.util.Properties


2.特性

Properties

1.繼承與Hashtable,所以是線程安全鍵值對存儲結構

2.可保存在流中或從流中加載

3.不同於Hashtable,Hashtable可保存object對象的鍵值對,Properties只能保存字符串類型的鍵值對


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");
	}

}


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