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資料夾下。
沒有使用絕對路徑的話,前端預設加上當前工程路徑。
這就是相對這個工程而言的相對路徑。