ini文件如下所示:
[module_0]
key-num = 2
redis-key = mon_login
redis-node = 192.168.144.119:6379|192.168.144.120:6379
polling = 1
[module_1]
key-num = 2
redis-key = mon_register
redis-node = 192.168.144.119:6379|192.168.144.120:6379
polling = 1
public class LoadConfig {
private static final Logger logger = Logger.getLogger(LoadConfig.class);
private BufferedReader reader = null;
private Map<String,Map<String, String>> map = null;
private String currentSection = null;
/**
* 构造函数
* @param path
*/
public LoadConfig(String path) throws IOException{
map = new HashMap<String, Map<String,String>>();
reader = new BufferedReader(new FileReader(path));
read(reader);
logger.info("load config file success.");
reader.close();
}
/**
* 读取文件
* @param reader
* @throws IOException
*/
private void read(BufferedReader reader) throws IOException {
String line = null;
while((line=reader.readLine())!=null) {
parseLine(line);
}
}
/**
* 转换
* @param line
*/
private void parseLine(String line) {
line = line.trim();
// 此部分为注释
if(line.matches("^\\#.*$")) {
return;
}else if (line.matches("^\\[\\S+\\]$")) {
// section
String section = line.replaceFirst("^\\[(\\S+)\\]$","$1");
addSection(map,section);
}else if (line.contains("=")) {
// key ,value
int i = line.indexOf("=");
String key = line.substring(0, i).trim();
String value =line.substring(i + 1).trim();
addKeyValue(map,currentSection,key,value);
}
}
/**
* 增加新的Key和Value
* @param map
* @param currentSection
* @param key
* @param value
*/
private void addKeyValue(Map<String, Map<String,String>> map,
String currentSection,String key, String value) {
if(!map.containsKey(currentSection)) {
return;
}
Map<String,String> childMap = map.get(currentSection);
if(!childMap.containsKey(key)) {
childMap.put(key, value);
}
}
/**
* 增加Section
* @param map
* @param section
*/
private void addSection(Map<String, Map<String,String>> map,
String section) {
if (!map.containsKey(section)) {
currentSection = section;
Map<String,String> childMap = new HashMap<String,String>();
map.put(section, childMap);
}
}
/**
* 获取配置文件指定Section和指定子键的值
* @param section
* @param key
* @return
*/
public String get(String section,String key){
if(map.containsKey(section)) {
return get(section).containsKey(key) ?
get(section).get(key): null;
}
return null;
}
/**
* 获取配置文件指定Section的子键和值
* @param section
* @return
*/
public Map<String, String> get(String section){
return map.containsKey(section) ? map.get(section) : null;
}
/**
* 获取这个配置文件的节点和值
* @return
*/
public Map<String, Map<String, String>> get(){
return map;
}
/**
* 关闭文件流
* @throws IOException
*/
public void close() throws IOException{
reader.close();
}
}