1. 程式人生 > >java讀取配置檔案封裝類,支援同時讀取多個檔案

java讀取配置檔案封裝類,支援同時讀取多個檔案

在springmvc中 通常需要用java程式碼讀取resource資原始檔中的properties配置檔案,我的辦法將支援同時讀取多個檔案.

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;



public class PropertyUtil {
    private static final Logger logger = LoggerFactory.getLogger(PropertyUtil.class);
    private static Properties props;
    private static Properties redisProps;
    private static Properties commonProps;
    private static String name;

    synchronized static private void loadProps(String fileName){
        logger.info("開始載入properties檔案內容.......");
        logger.info(fileName);
        props = new Properties();
        InputStream in = null;
        try {
            //第一種,通過類載入器進行獲取properties檔案流
            in = PropertyUtil.class.getClassLoader().getResourceAsStream(fileName);
            //第二種,通過類進行獲取properties檔案流
            //in = PropertyUtil.class.getResourceAsStream("/jdbc.properties");
            props.load(in);
        } catch (FileNotFoundException e) {
            logger.error(fileName+"檔案未找到");
        } catch (IOException e) {
            logger.error("出現IOException");
        } finally {
            try {
                if(null != in) {
                    in.close();
                }
            } catch (IOException e) {
                logger.error("jdbc.properties檔案流關閉出現異常");
            }
        }
        logger.info("載入properties檔案內容完成...........");
        logger.info("properties檔案內容:" + props);
    }


    public static String getProperty(String fileName,String key){
        if(null == props) {
            loadProps(fileName);
        }
        return props.getProperty(key);
    }

    public static String getProperty(String fileName,String key, String defaultValue) {
        if(null == props) {
            loadProps(fileName);
        }
        return props.getProperty(key, defaultValue);
    }

    public static Properties getAll(String fileName){
        logger.info("檔名:"+fileName);
        logger.info("props:"+props);
        if(null == props){
            loadProps(fileName);
        }else{
            if(!props.propertyNames().equals(fileName)){ //這一步是為了判斷再次讀取的時候是否是相同檔案
                loadProps(fileName);
            }
        }

        return props;
    }
}