java教程

Java读取ini文件 java教程

位置:首页 > java教程 > java技巧,2016-02-25
Java读取ini文件 java教程

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();
    }    
}

TAGS:Java读取ini文件java教程

猜你喜欢

NewHot