天天看點

java操作properties檔案簡單學習

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 &gt; 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&lt;String, String&gt; getAllKeyAndValue() {</code>

<code>        </code><code>Map&lt;String, String&gt; map = </code><code>new</code> <code>HashMap&lt;String, String&gt;();</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&lt;String, String&gt; 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 &lt; 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>&amp;&amp; value != </code><code>null</code><code>) {</code>

<code>                </code><code>setStarIdAndSpaceIdToLocalCache();</code>

<code>        </code><code>Map&lt;String, String&gt; map = p.getAllKeyAndValue2();</code>

<code>        </code><code>for</code><code>(Entry&lt;String, String&gt; 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,如需轉載請自行聯系原作者