配置文件.properties的使用
.properties是以键值对的形式保存数据,比文件保存更方便读取,而且不用修改源代码,不用重新编译源文件。
多用于保存配置数据,如jndi,cookie属性,上传下载目录等等。
另外,保存特殊化的内容十分有用,比如河北代码需要前台显示“河北”字样,云南代码需要显示“云南”字样,用properties就不用修改源码了。只需要河北写一个配置文件,云南写一个配置文件。
1、写好配置文件,在buildingpath中设置为源。
2、写读取配置文件的静态函数。(如ConfigConstants.java)
package com.wondersgroup.core.constant;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import org.apache.commons.lang.StringUtils;
public class ConfigConstants {
/** 单体实例 */
private static ConfigConstants instance;
/** 配置属性 */
private Map<String, String> config = new HashMap<String, String>();
/**
* 私有构造器
*/
private ConfigConstants() {
}
/**
* @return 返回 instance。
*/
public static ConfigConstants getInstance() {
if (instance == null) {
instance = new ConfigConstants();
}
return instance;
}
/**
* 获取配置属性
*
* @param key
* @return
*/
public String get(String key) {
return config.get(key);
}
/**
* 初始化配置属性
*
* @throws IOException
*/
public void init() throws IOException {
// 读取默认配置文件
this.read("/config.properties");
// 扩展配置文件路径配置项名称
String ext = "config.ext";
// 支持多重继承,循环读取配置
while (StringUtils.isNotBlank(this.config.get(ext))) {
// 读取扩展配置文件路径
String path = this.config.get(ext);
// 清除配置属性中已读取的扩展配置文件路径
this.config.remove(ext);
// 读取扩展配置文件
this.read(path);
}
}
/**
* 读取配置文件内容并将配置加载至内存
*
* @param conf 配置文件路径
* @throws IOException
*/
private void read(String conf) throws IOException {
if (StringUtils.isNotBlank(conf)) {
InputStream is = null;
Properties props = new Properties();
try {
is = ConfigConstants.class.getResourceAsStream(conf);
BufferedReader br = new BufferedReader(new InputStreamReader(is, "utf-8"));
props.load(br);
Enumeration<?> propKeys = props.propertyNames();
while (propKeys.hasMoreElements()) {
String propName = (String) propKeys.nextElement();
String propValue = props.getProperty(propName);
this.config.put(propName, propValue);
}
} finally {
if (is != null) {
is.close();
}
}
}
}
}
3、这时配置文件中的内容已经以map形式放在内存池中,之后程序中可以用ConfigConstants.getInstance().get("key")来取得相应value值。
附注:扩展配置文件的使用,在properties中有此键值“config.ext”(在ConfigConstants.java中)即可,比如:
config.ext /config-yn.properties