java操作properties檔案的工具類簡單封裝:
注意:由于本地和環境和linux服務的路徑有差別,或者jetty,resin,tomcat部署後,檔案的路徑也是有差別的。比如我們在linux上把項目放在另一個磁盤下,此時,檔案的路徑就是項目所在的路徑,而不是WEB-INF下,是以,這裡需要靈活配置!
<code>package</code> <code>com.sohu.util;</code>
<code>import</code> <code>java.io.BufferedInputStream;</code>
<code>import</code> <code>java.io.File;</code>
<code>import</code> <code>java.io.FileInputStream;</code>
<code>import</code> <code>java.io.FileNotFoundException;</code>
<code>import</code> <code>java.io.FileOutputStream;</code>
<code>import</code> <code>java.io.IOException;</code>
<code>import</code> <code>java.io.InputStream;</code>
<code>import</code> <code>java.util.Enumeration;</code>
<code>import</code> <code>java.util.HashMap;</code>
<code>import</code> <code>java.util.Map;</code>
<code>import</code> <code>java.util.Map.Entry;</code>
<code>import</code> <code>java.util.Properties;</code>
<code>import</code> <code>java.util.Set;</code>
<code>import</code> <code>org.springframework.core.io.ClassPathResource;</code>
<code>/**</code>
<code> </code><code>* 測試properties讀寫處理</code>
<code> </code><code>* @author liweihan ()</code>
<code> </code><code>* @version 1.0 (2015年1月6日 下午2:23:27)</code>
<code> </code><code>*/</code>
<code>public</code> <code>class</code> <code>TestProperties {</code>
<code> </code>
<code> </code><code>/**</code>
<code> </code><code>* 說明:很多時候我們為了減輕資料庫的壓力,或者減少我們的服務的壓力。</code>
<code> </code><code>* 對于不經常變的資料,我們可以放在配置檔案中!</code>
<code> </code><code>* </code>
<code> </code><code>* </code>
<code> </code><code>* containsKey()</code>
<code> </code><code>*/</code>
<code> </code><code>private</code> <code>static</code> <code>String PFILE = </code><code>null</code><code>;</code>
<code> </code><code>public</code> <code>static</code> <code>final</code> <code>boolean</code> <code>OS_LINUX = </code><code>"/"</code><code>.equals(File.separator); </code>
<code> </code><code>static</code><code>{</code>
<code> </code><code>Properties p = </code><code>new</code> <code>Properties();</code>
<code> </code><code>try</code> <code>{</code>
<code> </code><code>if</code><code>(OS_LINUX) {</code>
<code> </code><code>//方法1:</code>
<code> </code><code>//p.load(TestProperties.class.getClassLoader().getResourceAsStream("config.properties"));</code>
<code> </code>
<code> </code><code>//方法2:還可以用這個方法加載</code>
<code> </code><code>p.load(</code><code>new</code> <code>ClassPathResource(</code><code>"config.properties"</code><code>).getInputStream());</code>
<code> </code><code>//方法3:--應該用在具體路徑的地方</code>
<code>// InputStream in = new BufferedInputStream(new FileInputStream("config.properties"));</code>
<code>// p.load(in);</code>
<code> </code><code>} </code><code>else</code> <code>{</code>
<code> </code><code>//p.load(TestProperties.class.getClassLoader().getResourceAsStream("config-windows.properties"));</code>
<code> </code><code>//方法2:</code>
<code> </code><code>p.load(</code><code>new</code> <code>ClassPathResource(</code><code>"config-windows.properties"</code><code>).getInputStream());</code>
<code> </code><code>//方法3:---應該用在具體路徑的地方</code>
<code>// InputStream in = new BufferedInputStream(new FileInputStream("config-windows.properties"));</code>
<code> </code><code>}</code>
<code> </code><code>PFILE = p.getProperty(</code><code>"goodsongPath"</code><code>).trim();</code>
<code> </code><code>} </code><code>catch</code> <code>(IOException e) {</code>
<code> </code><code>e.printStackTrace();</code>
<code> </code><code>} </code>
<code> </code><code>}</code>
<code> </code><code>//屬性檔案全名</code>
<code>// private static final String PFILE = "D:\\liweiSohu\\workspaceForEclipse\\R20141229_han\\search-star-HDSS-STAR-WEB-F\\src\\main\\resources\\goodsong.properties";</code>
<code> </code><code>//上面是windows系統本地測試,下面是linux系統</code>
<code>// private static final String PFILE = System.getProperty("user.dir") + File.separator + "goodsong.properties";</code>
<code> </code><code>//對應于屬性檔案的檔案對象變量</code>
<code> </code><code>private</code> <code>File m_file = </code><code>null</code><code>;</code>
<code> </code><code>//屬性檔案的最後修改日期</code>
<code> </code><code>private</code> <code>long</code> <code>m_lastModifiedTime = </code><code>0</code><code>;</code>
<code> </code><code>//屬性檔案所對應的屬性對象變量</code>
<code> </code><code>private</code> <code>Properties m_props = </code><code>null</code><code>;</code>
<code> </code><code>//本類可能存在的唯一的唯一執行個體</code>
<code> </code><code>private</code> <code>static</code> <code>TestProperties m_instance = </code><code>new</code> <code>TestProperties();</code>
<code> </code><code>* 私有構造方法,用以保證外界無法直接執行個體化</code>
<code> </code><code>private</code> <code>TestProperties() {</code>
<code> </code><code>m_file = </code><code>new</code> <code>File(PFILE);</code>
<code> </code><code>m_lastModifiedTime = m_file.lastModified();</code>
<code> </code>
<code> </code><code>if</code> <code>(m_lastModifiedTime == </code><code>0</code><code>) {</code>
<code> </code><code>System.err.println(PFILE + </code><code>" file does not exist !"</code><code>);</code>
<code> </code><code>m_props = </code><code>new</code> <code>Properties();</code>
<code> </code><code>try</code> <code>{</code>
<code> </code><code>m_props.load(</code><code>new</code> <code>FileInputStream(PFILE));</code>
<code> </code><code>} </code><code>catch</code> <code>(Exception e) {</code>
<code> </code><code>e.printStackTrace();</code>
<code> </code><code>}</code>
<code> </code><code>* 傳回單一執行個體</code>
<code> </code><code>* @return</code>
<code> </code><code>* 2015年1月6日 下午2:58:02</code>
<code> </code><code>* liweihan</code>
<code> </code><code>public</code> <code>static</code> <code>synchronized</code> <code>TestProperties getInstance() {</code>
<code> </code><code>System.out.println(</code><code>" ---- :"</code> <code>+ System.getProperty(</code><code>"user.dir"</code><code>));</code>
<code> </code><code>return</code> <code>m_instance;</code>
<code> </code><code>* 讀取一特定的屬性項</code>
<code> </code><code>* @param name 屬性項的項名</code>
<code> </code><code>* @param defaultVal 屬性項的預設值</code>
<code> </code><code>* @return 屬性項的值(如果此項存在),預設值(如此項不存在)</code>
<code> </code><code>* 2015年1月6日 下午3:01:05</code>
<code> </code><code>public</code> <code>Object getConfigItem(String name,Object defaultVal) {</code>
<code> </code><code>long</code> <code>newTime = m_file.lastModified();</code>
<code> </code><code>//檢查屬性檔案是否被其他的程式修改過,如果是,重讀此配置檔案</code>
<code> </code><code>if</code> <code>(newTime == </code><code>0</code><code>) {</code>
<code> </code><code>//屬性檔案不存在</code>
<code> </code><code>if</code> <code>(m_lastModifiedTime == </code><code>0</code><code>) {</code>
<code> </code><code>System.err.println(PFILE + </code><code>" file does not exist !"</code><code>);</code>
<code> </code><code>} </code><code>else</code> <code>{</code>
<code> </code><code>System.err.println(PFILE + </code><code>" file was deleted !"</code><code>);</code>
<code> </code><code>}</code>
<code> </code>
<code> </code><code>return</code> <code>defaultVal;</code>
<code> </code><code>} </code><code>else</code> <code>if</code> <code>(newTime > m_lastModifiedTime) {</code>
<code> </code><code>//屬性檔案被修改過,重新加載配置檔案</code>
<code> </code><code>m_props.clear();</code>
<code> </code><code>m_props.load(</code><code>new</code> <code>FileInputStream(PFILE));</code>
<code> </code><code>} </code><code>catch</code> <code>(Exception e) {</code>
<code> </code><code>m_lastModifiedTime = newTime;</code>
<code> </code><code>Object val = m_props.getProperty(name);</code>
<code> </code><code>if</code> <code>(val == </code><code>null</code><code>) {</code>
<code> </code><code>} </code><code>else</code> <code>{</code>
<code> </code><code>return</code> <code>val;</code>
<code> </code><code>* 根據指定的屬性名獲得屬性值</code>
<code> </code><code>* @param itemName</code>
<code> </code><code>* 2015年1月6日 下午3:39:55</code>
<code> </code><code>public</code> <code>String getValue(String itemName) {</code>
<code> </code><code>return</code> <code>m_props.getProperty(itemName);</code>
<code> </code>
<code> </code><code>* 設定屬性名和屬性值[此設定并不能儲存到配置檔案中]</code>
<code> </code><code>* @param value</code>
<code> </code><code>* 2015年1月6日 下午3:45:08</code>
<code> </code><code>public</code> <code>void</code> <code>setValue(String itemName,String value) {</code>
<code> </code><code>m_props.setProperty(itemName, value);</code>
<code> </code><code>return</code><code>;</code>
<code> </code><code>* 儲存配置檔案,指定檔案名和擡頭描述</code>
<code> </code><code>* @param fileName</code>
<code> </code><code>* @param description</code>
<code> </code><code>* 2015年1月6日 下午3:56:09</code>
<code> </code><code>* @throws Exception </code>
<code> </code><code>public</code> <code>void</code> <code>saveFile(String fileName,String description) </code><code>throws</code> <code>Exception {</code>
<code> </code><code>FileOutputStream fout = </code><code>new</code> <code>FileOutputStream(fileName);</code>
<code> </code><code>m_props.store(fout, description);</code><code>//儲存檔案</code>
<code> </code><code>fout.close();</code>
<code> </code><code>System.out.println(</code><code>"無法儲存指定的配置檔案:"</code> <code>+ fileName);</code>
<code> </code><code>throw</code> <code>new</code> <code>Exception(</code><code>"無法儲存指定的配置檔案:"</code> <code>+ fileName);</code>
<code>// e.printStackTrace();</code>
<code> </code><code>} </code>
<code> </code><code>* 儲存指定的配置檔案</code>
<code> </code><code>* 2015年1月6日 下午3:59:04</code>
<code> </code><code>public</code> <code>void</code> <code>saveFile(String fileName) </code><code>throws</code> <code>Exception {</code>
<code> </code><code>saveFile(fileName,</code><code>""</code><code>);</code>
<code> </code><code>* 儲存指定檔案,采用原有名字</code>
<code> </code><code>* 2015年1月6日 下午4:01:49</code>
<code> </code><code>public</code> <code>void</code> <code>saveFile() </code><code>throws</code> <code>Exception{</code>
<code> </code><code>if</code> <code>(PFILE.length() == </code><code>0</code><code>) {</code>
<code> </code><code>throw</code> <code>new</code> <code>Exception(PFILE + </code><code>" file does not exist !"</code><code>);</code>
<code> </code><code>saveFile(PFILE);</code>
<code> </code><code>* 得到配置檔案中所有的key和value值,并放在一個map結合中</code>
<code> </code><code>* 2015年1月6日 下午4:50:39</code>
<code> </code><code>public</code> <code>Map<String, String> getAllKeyAndValue() {</code>
<code> </code><code>Map<String, String> map = </code><code>new</code> <code>HashMap<String, String>();</code>
<code> </code><code>Enumeration en = m_props.propertyNames();</code>
<code> </code><code>//周遊</code>
<code> </code><code>while</code> <code>(en.hasMoreElements()) {</code>
<code> </code><code>String key = en.nextElement().toString();</code><code>//key值</code>
<code> </code><code>String value = m_props.getProperty(key);</code>
<code> </code><code>map.put(key, value);</code>
<code> </code><code>return</code> <code>map;</code>
<code> </code><code>* 得到配置檔案中所有的key和value值,并放在一個map結合中2</code>
<code> </code><code>* 2015年1月7日 下午6:33:41</code>
<code> </code><code>public</code> <code>Map<String, String> getAllKeyAndValue2() {</code>
<code> </code><code>m_props.list(System.out);</code>
<code> </code><code>Object[] objs = m_props.keySet().toArray();</code>
<code> </code><code>for</code> <code>(</code><code>int</code> <code>i = </code><code>0</code><code>; i < objs.length; i++) {</code>
<code> </code><code>map.put(objs[i].toString(), m_props.get(objs[i]).toString());</code>
<code> </code><code>public</code> <code>static</code> <code>void</code> <code>main(String[] args) {</code>
<code> </code><code>//1.獲得java虛拟機的參數</code>
<code> </code><code>Properties pps = System.getProperties();</code>
<code> </code><code>pps.list(System.out);</code>
<code>}</code>
3.測試代碼:
<code> </code><code>TestProperties p = TestProperties.getInstance();</code>
<code> </code><code>String result = (String)p.getConfigItem(sid, </code><code>"0"</code><code>);</code>
<code> </code><code>System.out.println(</code><code>"result:"</code> <code>+ result);</code>
<code> </code><code>String result2 = p.getValue(sid);</code>
<code> </code><code>System.out.println(</code><code>"result2: "</code> <code>+ result2);</code>
<code>/* p.setValue("54418", "hanchao");</code>
<code> </code><code>p.setValue("20", "cc");*/</code>
<code> </code><code>p.setValue(key != </code><code>null</code> <code>? key : </code><code>"0"</code><code>, value != </code><code>null</code> <code>? value : </code><code>"0"</code><code>);</code>
<code>// p.saveFile("system.conf","System.Global.Configuration");</code>
<code> </code><code>p.saveFile();</code>
<code> </code><code>if</code> <code>(key != </code><code>null</code> <code>&& value != </code><code>null</code><code>) {</code>
<code> </code><code>setStarIdAndSpaceIdToLocalCache();</code>
<code> </code><code>Map<String, String> map = p.getAllKeyAndValue2();</code>
<code> </code><code>for</code><code>(Entry<String, String> en : map.entrySet()) {</code>
<code> </code><code>System.out.println(</code><code>"key:"</code> <code>+ en.getKey() + </code><code>", value :"</code> <code>+ en.getValue());</code>
<code> </code>
*
* 加載的六種方法:
本文轉自韓立偉 51CTO部落格,原文連結:http://blog.51cto.com/hanchaohan/1600546,如需轉載請自行聯系原作者