java读取properties属性文件

package com.newer;


import java.io.File;
import java.io.FileInputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Properties;


/**
 * 动态读取properties文件类
 * @author RSun
 * @Date 2012-11-14下午03:18:17
 */
public final class ReadPropertiesFile {


/** 属性文件全名,需要的时候请重新配置PFILE **/
private static String PFILE = "test.properties"; // src下面的文件

/** 属性文件所对应的属性对象变量   **/
private long m_lastModifiedTime = 0;

/** 对应于属性文件的文件对象变量  **/
private File m_file = null;

/** 属性文件所对应的属性对象变量  **/
private Properties m_props = null;


/** 唯一实例   **/
private static ReadPropertiesFile m_instance = new ReadPropertiesFile();




/** 私有构造函数 **/
private ReadPropertiesFile() {
try {
m_lastModifiedTime = getFile().lastModified();
if (m_lastModifiedTime == 0) {
System.err.println(PFILE + "file does not exist!");
}
m_props = new Properties();
m_props.load(new FileInputStream(getFile()));


} catch (URISyntaxException e) {
System.err.println(PFILE + "文件路径不正确");
e.printStackTrace();
} catch (Exception e) {
System.err.println(PFILE + "文件读取异常");
e.printStackTrace();
}
}



/**
* 查找ClassPath路径获取文件
* @return File对象
* @throws URISyntaxException
*/
private File getFile() throws URISyntaxException {
URI fileUri = this.getClass().getClassLoader().getResource(PFILE).toURI();
m_file = new File(fileUri);
return m_file;
}



/**
* 静态工厂方法
* @return 返回ConfigurationRead的单一实例
*/
public synchronized static ReadPropertiesFile getInstance() {
return m_instance;
}



/**
* 读取一特定的属性项
* @param name 属性项的名称
* @param defaultVal  读取失败默认值
* @return
*/
public String getConfigItem(String name, String 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(getFile()));
} catch (Exception e) {
System.err.println("文件重新读取异常");
e.printStackTrace();
}
}
m_lastModifiedTime = newTime;
String val = m_props.getProperty(name);
if (val == null) {
return defaultVal;
} else {
return val;
}
}




/**
* 读取一特定的属性项
* @param name 属性项的项名
* @return 属性项的值(如此项存在), 空(如此项不存在)
*/
public String getConfigItem(String name) {
return getConfigItem(name, "");
}



/**
* 读取一特定的属性项
* @param name 属性项的名称
* @return 截取空格后的数值
*/
public String getConfigItemTrim(String name) {
return getConfigItem(name, "").trim();
}


// 测试
public static void main(String[] args) {
System.out.println(ReadPropertiesFile.getInstance().getConfigItemTrim("aaa"));
System.out.println(ReadPropertiesFile.getInstance().getConfigItemTrim("bbb"));
System.out.println(ReadPropertiesFile.getInstance().getConfigItem("ccc", "哈哈,你被忽悠了!"));
}


}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值