(1)
java.util.Properties
通過(guò)這個(gè)文件,可以獲得屬性和設置存儲屬性
感覺(jué)有點(diǎn)像session,存進(jìn)去,讀出來(lái),但是這個(gè)是永久保存的介質(zhì)
FileInputStream fis=new FileInputStream("文件名");
Properties props =new Properties();
props.load(fis);
out.println("===="+props.getProperty("一個(gè)屬性名"));
fis.close();
(2)我們經(jīng)常使用.properties文件作為配置文件,所以大部分的時(shí)候,我們只是load,然后讀取其配置屬性.
但是,有的時(shí)候,我們可能也需要動(dòng)態(tài)的更新配置,那么怎么來(lái)實(shí)現對properties配置文件的更新操作呢.
這個(gè)問(wèn)題其實(shí)很簡(jiǎn)單,我們先看讀操作:
Properties p;
try {
p = PropertiesReader.readProperties("org/zy/common/parse/util/config.properties");
先載入配置文件,
String javaHome = p.getProperty("JAVA_HOME"));
通過(guò)getProperty()方法和關(guān)鍵字來(lái)實(shí)現屬性的檢索和返回.
那么,如何寫(xiě)?
多的時(shí)候我們知道,我們首先要讀我們的配置文件流,那么寫(xiě)的時(shí)候,我們也要先得到一個(gè)寫(xiě)文件流.
由于是文本文件,所以我們使用FileWriter.
String path =p.getClass().getResource("/org/zy/common/parse/util/config.properties").getPath();
Writer w=new FileWriter(path);
此時(shí),我們已經(jīng)準備好了,要把更新的屬性寫(xiě)到哪里,那么,如何寫(xiě)?
有的時(shí)候,可能你是要更新某個(gè)屬性,有的時(shí)候,可能你要添加一個(gè)屬性.
可能你會(huì )使用w.write()方法來(lái)實(shí)現寫(xiě)操作,沒(méi)有問(wèn)題,但是,你以前的配置就完全沒(méi)有了,如果想保留的話(huà),就只有完全寫(xiě)一個(gè)新的文件.這中方法,對于更新某個(gè)屬性的值來(lái)說(shuō)就稍微的麻煩一點(diǎn).當然,可以用正則表達式來(lái)實(shí)現.
其實(shí)properties本身也給我們提供了方法.
p.setProperty("bb", "bb update string");
p.store(w,"bb");
w.close();
我們可以讀屬性,就可以設置屬性.
setProperty()方法就可以實(shí)現.
但是此時(shí)的更新只是在內存中,并沒(méi)有寫(xiě)如文件.要寫(xiě)入文件的話(huà),就要調用store()方法.此時(shí),我們關(guān)閉輸出流的話(huà),數據已經(jīng)持久化到了文件.
setProperty()中,如果你的屬性是文件里面沒(méi)有的屬性,那么,系統會(huì )進(jìn)行追加操行,如果你的屬性,在系統中已經(jīng)存在,那么系統就會(huì )進(jìn)行更新操作.
例如:
你的配置文件是:
a=a
b=b
c=c
那么,如果你
p.setProperty("d","d");
那么,結果就是:
a=a
b=b
c=c
d=d
如果你執行
p.setProperty("a","d");
那么,結果就是:
a=d
b=b
c=c