package org.rps.util;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
/***
*
* 自定义属性文件读取
* @author YHC
*/
public class CustomizePropertyPlaceHolder extends PropertyPlaceholderConfigurer{
public CustomizePropertyPlaceHolder() {
}
/***
* 存储读取后的属性文件的引用
*/
private Properties properties=null;
//重写处理属性文件的方法
@Override
protected void processProperties(
ConfigurableListableBeanFactory beanFactoryToProcess,
Properties props) throws BeansException {
//执行父类处理读取文件
super.processProperties(beanFactoryToProcess, props);
//存储属性文件的引用
properties=props;
}
/***
* 根据属性文件中的键值获取对应属性文件中的值
* @param key 属性文件中的键值
* @return 对应属性文件中的属性值
*/
public String getProperty(String key){
return properties.getProperty(key);
}
/****
* 用值填充属性文件中的占位符{0},{1}...,值的顺序必须和参数的顺序是一致的
* @param key 属性文件中的键值
* @param values 对应属性文件中的占位符的信息
* @return 将占位符中的信息对应填充后的字符串
*/
public String getProperty(String key,String... values){
//对应占位符参数值
String[] vs=values;
//属性文件中的值
String v=getProperty(key);
//如果没有参数
if(vs==null||vs.length==0){
return getProperty(key);
}
//如果属性文件中没有值,则返回空字符串
if(v==null){
return "";
}
StringBuffer buffer=new StringBuffer();
//遍历参数数组
for (int i = 0; i < vs.length; i++) {
//替换前清空原有替换值
buffer.delete(0, buffer.length());
Pattern pattern=Pattern.compile("\\{"+i+"\\}");
Matcher matcher=pattern.matcher(v);
while(matcher.find()){
matcher.appendReplacement(buffer, vs[i]);
}
matcher.appendTail(buffer);
//进行下一次替换
v=buffer.toString();
}
//返回后替换的字符串
return buffer.toString();
}
}