Properties讀取配置文件
很多時候,我們會把一些設置,環境等數據量不大,而且不經常改變的參數寫到配置文件中,然后在程序中讀取這些參數。
??? 讀取參數是一個很簡單的過程,可以用java.util.Properties來完成。先來看看官方文檔:
??Properties?類表示了一個持久的屬性集。Properties?可保存在流中或從流中加載。屬性列表中每個鍵及其對應值都是一個字符串。?
??一個屬性列表可包含另一個屬性列表作為它的“默認值”;如果未能在原有的屬性列表中搜索到屬性鍵,則搜索第二個屬性列表。?
??因為?Properties?繼承于?Hashtable,所以可對?Properties?對象應用?put?和?putAll?方法。但強烈反對使用這兩個方法,因為它們允許調用方插入其鍵或值不是?Strings?的項。相反,應該使用?setProperty?方法。如果在“有危險”的?Properties?對象(即包含非?String?的鍵或值)上調用?store?或?save?方法,則該調用將失敗。?
??load?和?store?方法按下面所指定的、簡單的面向行的格式加載和存儲屬性。此格式使用?ISO?8859-1?字符編碼。可以使用?Unicode?轉義符來編寫此編碼中無法直接表示的字符;轉義序列中只允許單個?'u'?字符。可使用?native2ascii?工具對屬性文件和其他字符編碼進行相互轉換。?
??loadFromXML(InputStream)?和?storeToXML(OutputStream,?String,?String)?方法按簡單的?XML?格式加載和存儲屬性。默認使用?UTF-8?字符編碼,但如果需要,可以指定某種特定的編碼。XML?屬性文檔具有以下?DOCTYPE?聲明:?
? <! DOCTYPE?properties?SYSTEM?"http://java.sun.com/dtd/properties.dtd" >
?注意,導入或導出屬性時不?訪問系統?URI?(http://java.sun.com/dtd/properties.dtd);該系統?URI?僅作為一個惟一標識?DTD?的字符串:?
???? <? xml?version="1.0"?encoding="UTF-8" ?>
???? <!-- ?DTD?for?properties? -->
???? <! ELEMENT?properties?(?comment?,?entry*?)? >
???? <! ATTLIST?properties?version?CDATA?#FIXED?"1.0" >
???? <! ELEMENT?comment?(#PCDATA)? >
???? <! ELEMENT?entry?(#PCDATA)? >
???? <! ATTLIST?entry?key?CDATA?#REQUIRED >
??一個屬性列表可包含另一個屬性列表作為它的“默認值”;如果未能在原有的屬性列表中搜索到屬性鍵,則搜索第二個屬性列表。?
??因為?Properties?繼承于?Hashtable,所以可對?Properties?對象應用?put?和?putAll?方法。但強烈反對使用這兩個方法,因為它們允許調用方插入其鍵或值不是?Strings?的項。相反,應該使用?setProperty?方法。如果在“有危險”的?Properties?對象(即包含非?String?的鍵或值)上調用?store?或?save?方法,則該調用將失敗。?
??load?和?store?方法按下面所指定的、簡單的面向行的格式加載和存儲屬性。此格式使用?ISO?8859-1?字符編碼。可以使用?Unicode?轉義符來編寫此編碼中無法直接表示的字符;轉義序列中只允許單個?'u'?字符。可使用?native2ascii?工具對屬性文件和其他字符編碼進行相互轉換。?
??loadFromXML(InputStream)?和?storeToXML(OutputStream,?String,?String)?方法按簡單的?XML?格式加載和存儲屬性。默認使用?UTF-8?字符編碼,但如果需要,可以指定某種特定的編碼。XML?屬性文檔具有以下?DOCTYPE?聲明:?
? <! DOCTYPE?properties?SYSTEM?"http://java.sun.com/dtd/properties.dtd" >
?注意,導入或導出屬性時不?訪問系統?URI?(http://java.sun.com/dtd/properties.dtd);該系統?URI?僅作為一個惟一標識?DTD?的字符串:?
???? <? xml?version="1.0"?encoding="UTF-8" ?>
???? <!-- ?DTD?for?properties? -->
???? <! ELEMENT?properties?(?comment?,?entry*?)? >
???? <! ATTLIST?properties?version?CDATA?#FIXED?"1.0" >
???? <! ELEMENT?comment?(#PCDATA)? >
???? <! ELEMENT?entry?(#PCDATA)? >
???? <! ATTLIST?entry?key?CDATA?#REQUIRED >
??? 寫一個讀取參數的簡單的例子:
package
?woxingwosu;
import ?java.io.BufferedInputStream;
import ?java.io.FileInputStream;
import ?java.util.Properties;
public ? class ?ReadProperties?{
???? public ? static ? void ?main(String[]?args)?{
???????? // 對于XML文件一定要符合http: // java.sun.com/dtd/properties.dtd
????????String?name = " woxingwosu.xml " ;
????????Properties?prop = loadFile(name);
???????? if (prop != null ){
????????????System.out.println( " XMl?file " );
????????????System.out.println( " no= " + prop.getProperty( " no " ));
????????????System.out.println( " name= " + prop.getProperty( " name " ));
????????}
????????
???????? // 對于非XML文件,key與value之間可以用冒號隔開,也可以用空格隔開
????????name = " woxingwosu.properties " ;
????????prop = loadFile(name);
???????? if (prop != null ){
????????????System.out.println( " Properties?file " );
????????????System.out.println( " no= " + prop.getProperty( " no " ));
????????????System.out.println( " name= " + prop.getProperty( " name " ));
????????}
????}
????
???? /**
?????*?加載配置文件
?????*? @param ?path????????--文件的路徑
?????*? @param ?isXmlFile?--true:配置文件是XML文件,false:非XML文件
?????*? @return (Properties)
????? */
???? private ? static ?Properties?loadFile(String?path){
????????Properties?prop = null ;
???????? try {
????????????BufferedInputStream?inBuff = new ?BufferedInputStream( new ?FileInputStream(path));
????????????prop = new ?Properties();
???????????? if (path.endsWith( " .xml " ))
????????????????prop.loadFromXML(inBuff);
???????????? else
????????????????prop.load(inBuff);
????????????inBuff.close();
????????} catch (Exception?e){
????????????e.printStackTrace();
????????}
???????? return ?prop;
????}
}
import ?java.io.BufferedInputStream;
import ?java.io.FileInputStream;
import ?java.util.Properties;
public ? class ?ReadProperties?{
???? public ? static ? void ?main(String[]?args)?{
???????? // 對于XML文件一定要符合http: // java.sun.com/dtd/properties.dtd
????????String?name = " woxingwosu.xml " ;
????????Properties?prop = loadFile(name);
???????? if (prop != null ){
????????????System.out.println( " XMl?file " );
????????????System.out.println( " no= " + prop.getProperty( " no " ));
????????????System.out.println( " name= " + prop.getProperty( " name " ));
????????}
????????
???????? // 對于非XML文件,key與value之間可以用冒號隔開,也可以用空格隔開
????????name = " woxingwosu.properties " ;
????????prop = loadFile(name);
???????? if (prop != null ){
????????????System.out.println( " Properties?file " );
????????????System.out.println( " no= " + prop.getProperty( " no " ));
????????????System.out.println( " name= " + prop.getProperty( " name " ));
????????}
????}
????
???? /**
?????*?加載配置文件
?????*? @param ?path????????--文件的路徑
?????*? @param ?isXmlFile?--true:配置文件是XML文件,false:非XML文件
?????*? @return (Properties)
????? */
???? private ? static ?Properties?loadFile(String?path){
????????Properties?prop = null ;
???????? try {
????????????BufferedInputStream?inBuff = new ?BufferedInputStream( new ?FileInputStream(path));
????????????prop = new ?Properties();
???????????? if (path.endsWith( " .xml " ))
????????????????prop.loadFromXML(inBuff);
???????????? else
????????????????prop.load(inBuff);
????????????inBuff.close();
????????} catch (Exception?e){
????????????e.printStackTrace();
????????}
???????? return ?prop;
????}
}
??? 配置文件woxingwosu.xml
<?
xml?version="1.0"?encoding="UTF-8"
?>
?
<! DOCTYPE?properties?SYSTEM?"http://java.sun.com/dtd/properties.dtd" > ?
< properties > ?
< entry? key ="no" > woxingwosu </ entry > ?
< entry? key ="name" > 我行我素 </ entry > ?
</ properties > ?
<! DOCTYPE?properties?SYSTEM?"http://java.sun.com/dtd/properties.dtd" > ?
< properties > ?
< entry? key ="no" > woxingwosu </ entry > ?
< entry? key ="name" > 我行我素 </ entry > ?
</ properties > ?
??? 配置文件woxingwosu.properties(我用Unicode編碼)


??? 除了讀取參數,同時也可以修改參數,添加參數,或者生成一個文件,參考一下幫助文檔,其實都很簡單。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
