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