package com.baidu.disconf.client.support.utils;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URL;
import java.util.Properties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.baidu.disconf.core.common.utils.ClassLoaderUtil;
/**
* 配置导入工具
*
* @author liaoqiqi
* @version 2014-6-6
*/
public final class ConfigLoaderUtils {
protected static final Logger LOGGER = LoggerFactory
.getLogger(ConfigLoaderUtils.class);
private ConfigLoaderUtils() {
}
/**
* @param propertyFilePath
*
* @return void
*
* @Description: 使用TOMCAT方式来导入
* @author liaoqiqi
* @date 2013-6-19
*/
private static Properties loadWithTomcatMode(final String propertyFilePath)
throws Exception {
Properties props = new Properties();
try {
// 先用TOMCAT模式进行导入
// http://blog.csdn.net/minfree/article/details/1800311
// http://stackoverflow.com/questions/3263560/sysloader-getresource-problem-in-java
URL url = ClassLoaderUtil.getLoader().getResource(propertyFilePath);
URI uri = new URI(url.toString());
props.load(new InputStreamReader(new FileInputStream(uri.getPath()), "utf-8"));
} catch (Exception e) {
// http://stackoverflow.com/questions/574809/load-a-resource-contained-in-a-jar
props.load(new InputStreamReader(ClassLoaderUtil.getLoader().getResourceAsStream(propertyFilePath),
"utf-8"));
}
return props;
}
/**
* @param propertyFilePath
*
* @return void
*
* @Description: 使用普通模式导入
* @author liaoqiqi
* @date 2013-6-19
*/
private static Properties loadWithNormalMode(final String propertyFilePath)
throws Exception {
Properties props = new Properties();
props.load(new InputStreamReader(new FileInputStream(propertyFilePath), "utf-8"));
return props;
}
/**
* @param propertyFilePath
*
* @return Properties
*
* @throws Exception
* @Description: 配置文件载入器助手
* @author liaoqiqi
* @date 2013-6-19
*/
public static Properties loadConfig(final String propertyFilePath)
throws Exception {
try {
// 用TOMCAT模式 来载入试试
return ConfigLoaderUtils.loadWithTomcatMode(propertyFilePath);
} catch (Exception e1) {
try {
// 用普通模式进行载入
return loadWithNormalMode(propertyFilePath);
} catch (Exception e2) {
throw new Exception("cannot load config file: "
+ propertyFilePath);
}
}
}
/**
* @param filePath
*
* @return InputStream
*
* @Description: 采用两种方式来载入文件
* @author liaoqiqi
* @date 2013-6-20
*/
public static InputStream loadFile(String filePath) {
InputStream in = null;
try {
// 先用TOMCAT模式进行导入
in = ClassLoaderUtil.getLoader().getResourceAsStream(filePath);
if (in == null) {
// 使用普通模式导入
try {
return new FileInputStream(filePath);
} catch (FileNotFoundException e) {
return null;
}
} else {
return in;
}
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
LOGGER.error("WHY HERE!", e);
}
}
}
}
}