天天看点

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,如需转载请自行联系原作者