您的位置:首页 > 编程语言 > Java开发

java操作properties文件简单学习

2015-01-08 10:30 465 查看
java操作properties文件的工具类简单封装:

注意:由于本地和环境和linux服务的路径有区别,或者jetty,resin,tomcat部署后,文件的路径也是有区别的。比如我们在linux上把项目放在另一个磁盘下,此时,文件的路径就是项目所在的路径,而不是WEB-INF下,所以,这里需要灵活配置!

package com.sohu.util;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;

import org.springframework.core.io.ClassPathResource;

/**
* 测试properties读写处理
* @author liweihan ()
* @version 1.0 (2015年1月6日 下午2:23:27)
*/
public class TestProperties {

/**
* 说明:很多时候我们为了减轻数据库的压力,或者减少我们的服务的压力。
* 对于不经常变的数据,我们可以放在配置文件中!
*
*
*     containsKey()
*
*/
private static String PFILE = null;
public static final boolean OS_LINUX = "/".equals(File.separator);
static{
Properties p = new Properties();
try {
if(OS_LINUX) {
//方法1:
//p.load(TestProperties.class.getClassLoader().getResourceAsStream("config.properties"));

//方法2:还可以用这个方法加载
p.load(new ClassPathResource("config.properties").getInputStream());

//方法3:--应该用在具体路径的地方
//		        	InputStream in = new BufferedInputStream(new FileInputStream("config.properties"));
//		        	p.load(in);
} else {
//方法1:
//p.load(TestProperties.class.getClassLoader().getResourceAsStream("config-windows.properties"));

//方法2:
p.load(new ClassPathResource("config-windows.properties").getInputStream());

//方法3:---应该用在具体路径的地方
//		        	InputStream in = new BufferedInputStream(new FileInputStream("config-windows.properties"));
//		        	p.load(in);

}
PFILE = p.getProperty("goodsongPath").trim();
} catch (IOException e) {
e.printStackTrace();
}
}

//属性文件全名
//	private static final String PFILE = "D:\\liweiSohu\\workspaceForEclipse\\R20141229_han\\search-star-HDSS-STAR-WEB-F\\src\\main\\resources\\goodsong.properties";
//上面是windows系统本地测试,下面是linux系统
//	private static final String PFILE = System.getProperty("user.dir") + File.separator + "goodsong.properties";

//对应于属性文件的文件对象变量
private File m_file = null;
//属性文件的最后修改日期
private long m_lastModifiedTime = 0;
//属性文件所对应的属性对象变量
private Properties m_props = null;

//本类可能存在的唯一的唯一实例
private static TestProperties m_instance = new TestProperties();

/**
* 私有构造方法,用以保证外界无法直接实例化
*/
private TestProperties() {
m_file = new File(PFILE);
m_lastModifiedTime = m_file.lastModified();

if (m_lastModifiedTime == 0) {
System.err.println(PFILE + " file does not exist !");
}
m_props = new Properties();
try {
m_props.load(new FileInputStream(PFILE));
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 返回单一实例
* @return
*
* 2015年1月6日 下午2:58:02
* liweihan
*/
public static synchronized TestProperties getInstance() {
System.out.println(" ---- :" + System.getProperty("user.dir"));
return m_instance;
}

/**
* 读取一特定的属性项
* @param name		属性项的项名
* @param defaultVal	属性项的默认值
* @return	属性项的值(如果此项存在),默认值(如此项不存在)
*
* 2015年1月6日 下午3:01:05
* liweihan
*/
public Object getConfigItem(String name,Object defaultVal) {
long newTime = m_file.lastModified();
//检查属性文件是否被其他的程序修改过,如果是,重读此配置文件
if (newTime == 0) {
//属性文件不存在
if (m_lastModifiedTime == 0) {
System.err.println(PFILE + " file does not exist !");
} else {
System.err.println(PFILE + " file was deleted !");
}

return defaultVal;
} else if (newTime > m_lastModifiedTime) {
//属性文件被修改过,重新加载配置文件
m_props.clear();
try {
m_props.load(new FileInputStream(PFILE));
}  catch (Exception e) {
e.printStackTrace();
}
}
m_lastModifiedTime = newTime;
Object val = m_props.getProperty(name);
if (val == null) {
return defaultVal;
} else {
return val;
}
}

/**
* 根据指定的属性名获得属性值
* @param itemName
* @return
*
* 2015年1月6日 下午3:39:55
* liweihan
*/
public String getValue(String itemName) {
return m_props.getProperty(itemName);
}

/**
* 设置属性名和属性值[此设置并不能保存到配置文件中]
* @param itemName
* @param value
*
* 2015年1月6日 下午3:45:08
* liweihan
*/
public void setValue(String itemName,String value) {
m_props.setProperty(itemName, value);
return;
}

/**
* 保存配置文件,指定文件名和抬头描述
* @param fileName
* @param description
*
* 2015年1月6日 下午3:56:09
* liweihan
* @throws Exception
*/
public void saveFile(String fileName,String description) throws Exception {
try {
FileOutputStream fout = new FileOutputStream(fileName);
m_props.store(fout, description);//保存文件
fout.close();
} catch (Exception e) {
System.out.println("无法保存指定的配置文件:" + fileName);
throw new Exception("无法保存指定的配置文件:" + fileName);
//			e.printStackTrace();
}
}

/**
* 保存指定的配置文件
* @param fileName
*
* 2015年1月6日 下午3:59:04
* liweihan
* @throws Exception
*/
public void saveFile(String fileName) throws Exception {
saveFile(fileName,"");
}

/**
* 保存指定文件,采用原有名字
*
*
* 2015年1月6日 下午4:01:49
* liweihan
*/
public void saveFile() throws Exception{
if (PFILE.length() == 0) {
throw new Exception(PFILE + " file does not exist !");
}
saveFile(PFILE);
}

/**
* 得到配置文件中所有的key和value值,并放在一个map结合中
* @return
*
* 2015年1月6日 下午4:50:39
* liweihan
*/
public Map<String, String> getAllKeyAndValue() {
Map<String, String> map = new HashMap<String, String>();

Enumeration en = m_props.propertyNames();
//遍历
while (en.hasMoreElements()) {
String key = en.nextElement().toString();//key值
String value = m_props.getProperty(key);
map.put(key, value);
}
return map;
}

/**
* 得到配置文件中所有的key和value值,并放在一个map结合中2
* @return
*
* 2015年1月7日 下午6:33:41
* liweihan
*/
public Map<String, String> getAllKeyAndValue2() {
Map<String, String> map = new HashMap<String, String>();

m_props.list(System.out);
Object[] objs = m_props.keySet().toArray();
for (int i = 0; i < objs.length; i++) {
map.put(objs[i].toString(), m_props.get(objs[i]).toString());
}
return map;
}

public static void main(String[] args) {

//1.获得java虚拟机的参数
Properties pps = System.getProperties();
pps.list(System.out);

}

}

3.测试代码:
TestProperties p = TestProperties.getInstance();
String result = (String)p.getConfigItem(sid, "0");
System.out.println("result:" + result);

String result2 = p.getValue(sid);
System.out.println("result2: " + result2);

/*		p.setValue("54418", "hanchao");
p.setValue("20", "cc");*/
p.setValue(key != null ? key : "0", value != null ? value : "0");

try {
//			p.saveFile("system.conf","System.Global.Configuration");
p.saveFile();
if (key != null && value != null) {
setStarIdAndSpaceIdToLocalCache();
}
} catch (Exception e) {
e.printStackTrace();
}

Map<String, String> map = p.getAllKeyAndValue2();
for(Entry<String, String> en : map.entrySet()) {
System.out.println("key:" + en.getKey() + ", value :" + en.getValue());
}


* 参考:http://wenku.baidu.com/link?url=-02_xrVX1_OQn0a1EcGDQ-LYQ08QXkmVMHHJ7z_aliEkG_4orbP94fjdAf4V5em7PfNXISGbN1gmmRWWED_GrnEDAXWPEsCwCmrsDaUr82W

* http://wenku.baidu.com/view/bbe96f6e25c52cc58bd6be99.html

* /article/5171942.html

*
* 加载的六种方法:
* http://blog.csdn.net/Senton/article/details/4083127

本文出自 “我的JAVA世界” 博客,请务必保留此出处http://hanchaohan.blog.51cto.com/2996417/1600546
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: