1. 程式人生 > >5.8 Properties

5.8 Properties

一、Propertie

主要用於讀寫資源配置檔案。

Properties繼承自Hashtable。

我們來看下HashMap和Hashtable的區別:

  Hashtabl  執行緒安全,    同步,   效率較低。

  HashMap 執行緒不安全,不同步,效率高。

 

  Hashtable key和value都不能為空

  HashMap 允許一個key為null,允許多個value為null。

 

Properties中每個key及value都只能是字串,由於其繼承自Hashtable所以都不能為空。

為空會丟擲NullPointException。

 

二、常用方法

getProperty(String key)

根據key返回對應的value。


getProperty(String key, String defaultValue)
根據key返回對應的value,如果,不存在則返回defaultValue。

defaultValue自己指定,作為key為空時的備用選項。

 

setProperty(String key, String value)

設定Properties的key和value

 

我們先來用下這幾個方法,和之前使用Map差不多

import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;

public class Test {
    public static void main(String args[]){
        Properties pro = new Properties();
        pro.setProperty("DIVER", "com.mysql.cj.jdbc.Driver");//新增元素
        pro.setProperty(
"URL", "jdbc:mysql://localhost:3306/jdbc"); pro.setProperty("USER", "root"); pro.setProperty("PASS", "xxxxxx"); Set<Map.Entry<Object, Object>> mS= pro.entrySet();//使用迭代器輸出所有元素 Iterator<Map.Entry<Object,Object>> ite = mS.iterator(); while(ite.hasNext()){ Entry<Object,Object> en = ite.next(); System.out.println("key:" +en.getKey() + "-->"+"value:" +en.getValue()); } } }
執行結果:
key:PASS-->value:xxxxxx
key:URL-->value:jdbc:mysql://localhost:3306/jdbc
key:USER-->value:root
key:DIVER-->value:com.mysql.cj.jdbc.Driver

 

此時pro物件中就有這些配置資訊,接下來那我們將這些配置資訊生成配置檔案。

 

生成*.properties檔案

store(OutputStream out,String comments);

生成*.xml檔案

storeToXml(OutputStream out,String comments);

 

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;

public class Test {
    public static void main(String args[]) throws FileNotFoundException, IOException{
        Properties pro = new Properties();
        pro.setProperty("DIVER", "com.mysql.cj.jdbc.Driver");
        pro.setProperty("URL", "jdbc:mysql://localhost:3306/jdbc");
        pro.setProperty("USER", "root");
        pro.setProperty("PASS", "xxxxxx");
        pro.store(new FileOutputStream("E:/sqlProperties.properties"), "sql");//E盤下生成properties格式的檔案
        pro.storeToXML(new FileOutputStream("E:/sqlXml.xml"), "sql");//E盤下生成xml格式檔案
    }
}

執行後我們會發現E盤下多了兩個檔案:

 

 

我們用記事本開啟這兩個檔案:

我們之前的配置資訊就生成了對應的配置檔案。 

 

上面使用的是絕對路徑,我們一般使用相對路徑,預設在當前工程下。

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;

public class Test {
    public static void main(String args[]) throws FileNotFoundException, IOException{
        Properties pro = new Properties();
        pro.setProperty("DIVER", "com.mysql.cj.jdbc.Driver");
        pro.setProperty("URL", "jdbc:mysql://localhost:3306/jdbc");
        pro.setProperty("USER", "root");
        pro.setProperty("PASS", "xxxxxx");
        pro.store(new FileOutputStream("sqlProperties.properties"), "sql");
        pro.storeToXML(new FileOutputStream("src/sqlXml.xml"), "sql");
    }
}

 

 

可以看到

"sqlProperties.properties"是直接儲存到當前專案下,

"src/sqlXml.xml"是儲存在當前工程下的src資料夾下。

沒有使用絕對路徑的話,前端預設加上當前工程路徑。

這就是相對這個工程而言的相對路徑。