尝试使用Java7 try-with-resource对Properties进行封装。
package com.hirain;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
* Properties工具类
* Created by caicf on 2016/12/4.
*/
public final class PropUtils {
private static final Logger logger = LoggerFactory.getLogger(PropUtils.class);
private static Properties properties;
static {
properties = loadProps("log4j.properties");
}
/**
* 加载属性文件
*
* @param fileName
* @return
*/
public static Properties loadProps(String fileName) {
Properties properties = null;
try (InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName)) {
if (is == null) {
throw new FileNotFoundException(fileName + " is not found!");
}
properties = new Properties();
properties.load(is);
logger.info("load properties file " + fileName + " success!");
} catch (IOException e) {
logger.error("load properties file " + fileName + " failure!", e);
}
return properties;
}
/**
* 获取字符型属性
* @param key
* @return
*/
public static String getString(Properties properties, String key) {
return getString(properties, key, null);
}
/**
* 获取字符型属性,可以指定默认值
* @param key
* @param defaultValue
* @return
*/
public static String getString(Properties properties, String key, String defaultValue) {
return properties.containsKey(key) ? properties.getProperty(key) : defaultValue;
}
}
通常使用try-cathch-finall进行异常处理,需要在finally里进行判断和再次异常捕获。是使用try-with-resource后JDK可以帮我们做这些操作,使代码更加整洁。
public void test(Properties properties,String fileName) {
InputStream is = null;
try {
is = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName);
if (is == null) {
throw new FileNotFoundException(fileName + " is not found!");
}
properties = new Properties();
properties.load(is);
} catch (IOException e) {
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}