package zj.message.util;
import java.io.Serializable;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import zj.check.util.CheckUtil;
import zj.java.util.JavaUtil;
/**
* 常量资源文件工具类<br>
*
* @version 1.00 (2011.12.02)
* @author SHNKCS 张军 {@link <a target=_blank href="http://www.shanghaijiadun.com">上海加盾信息科技有限公司</a> <a target=_blank href="http://www.zhangjunbk.com">张军个人网站</a> <a target=_blank href="http://user.qzone.qq.com/360901061/">张军QQ空间</a>}
*/
public class MessageConstantsUtil implements Serializable {
private static final long serialVersionUID = 1L;
private transient static final Logger log = Logger.getLogger(MessageConstantsUtil.class);
public static String AJAX_SUCCESS;
public static String AJAX_FAIL;
public static String AJAX_MSG;
/** 资源键值对 **/
public static final Map<String, String> CONSTANT_KEY_VALUE = Collections.synchronizedMap(new HashMap<String, String>());
/** 资源文件地址集合,有序 **/
public static List<String> CONFIGS = new ArrayList<String>();
/** 国际化资源文件/资源文件内容初使化 **/
static {
AJAX_SUCCESS = "success";
AJAX_FAIL = "fail";
AJAX_MSG = "msg";
loadConfig(null);
}
// 资源文件
/**
* 设置资源文件路径
*
* @param configFile
* <p>
* ./constant.properties
* </p>
* <p>
* ./systemConfig.properties
* </p>
* <p>
* ./app.properties
* </p>
* @return 资源文件值
*/
public static void loadConfig(String configFile) {
// 默认注册资源文件地址
CONFIGS.add("./constant.properties");
CONFIGS.add("./systemConfig.properties");
CONFIGS.add("./app.properties");
// 添加新的资源文件地址
String[] configs = JavaUtil.split(configFile, ",");
for (String s : configs) {
if (CheckUtil.isNull(s))
continue;
CONFIGS.add(s);
}
// 如果设置绝对路径,重新调用此方法
setConstantKeyValueToMemory();
}
/**
* 获取资源文件值
*
* @param key
* 资源文件key
* @param notExistIsNull
* <p>
* true:如果资源文件键不存在,则返回null
* </p>
* <p>
* false:如果资源文件键不存在,则返回资源文件key
* </p>
* @return 资源文件值
*/
public static String getConstantValue(String key, boolean notExistIsNull) {
String value = null;
boolean exists = false;
for (String path : CONFIGS) {
value = ConfigUtil.getConfig(path, key);
if (value != null && !value.equals(key)) {
exists = true;
break;
}
}
if (!exists) {
if (notExistIsNull) {
value = null;
} else {
value = key;
}
}
CONSTANT_KEY_VALUE.put(key, value);
return value;
}
/**
* 获取资源文件值
*
* @param key
* 资源文件key
* @return 资源文件值
*/
public static String getConstantValue(String key) {
return getConstantValue(key, true);
}
/**
* 获取资源文件值
*
* @param key
* 资源文件key
* @param notExistIsNull
* <p>
* true:如果资源文件键不存在,则返回null
* </p>
* <p>
* false:如果资源文件键不存在,则返回资源文件key
* </p>
* @param arguments
* 资源文件参数
* @return 资源文件值
*/
public static String getConstantValueByParams(String key, boolean notExistIsNull, Object... arguments) {
return getValueByParams(getConstantValue(key, notExistIsNull), arguments);
}
/**
* 获取资源文件值
*
* @param key
* 资源文件key
* @param arguments
* 资源文件参数
* @return 资源文件值
*/
public static String getConstantValueByParams(String key, Object... arguments) {
return getConstantValueByParams(key, true, arguments);
}
/**
* 获取资源文件值
*
* @param key
* 资源文件key
* @param paths
* 资源文件路径集合
* @param notExistIsNull
* <p>
* true:如果资源文件键不存在,则返回null
* </p>
* <p>
* false:如果资源文件键不存在,则返回资源文件key
* </p>
* @return 资源文件值
*/
public static String getConstantValueByMemory(String key, List<String> paths, boolean notExistIsNull) {
String value = null;
if (CheckUtil.isNull(key)) {
// 不需要清除缓存,会覆盖最新的值
// 先清除缓存
// CONSTANT_KEY_VALUE.clear();
// 最好只调用一次
CONSTANT_KEY_VALUE.putAll(ConfigUtil.getConstantKeyValues(paths));
log.debug("[信息] 加载所有常量数据至缓存成功:"+paths);
} else {
if ((value = CONSTANT_KEY_VALUE.get(key)) == null) {
value = getConstantValue(key, notExistIsNull);
CONSTANT_KEY_VALUE.put(key, value);
}
}
return value;
}
/**
* 设置所有资源键值
*/
public static void setConstantKeyValueToMemory() {
setConstantKeyValueToMemory(true);
}
/**
* 设置所有资源键值
*
* @param notExistIsNull
* <p>
* true:如果资源文件键不存在,则返回null
* </p>
* <p>
* false:如果资源文件键不存在,则返回资源文件key
* </p>
*/
public static void setConstantKeyValueToMemory(boolean notExistIsNull) {
getConstantValueByMemory(null, CONFIGS, notExistIsNull);
}
/**
* 获取资源文件值
*
* @param key
* 资源文件key(不能为null)
* @param notExistIsNull
* <p>
* true:如果资源文件键不存在,则返回null
* </p>
* <p>
* false:如果资源文件键不存在,则返回资源文件key
* </p>
* @return 资源文件值
*/
public static String getConstantValueByMemory(String key, boolean notExistIsNull) {
return getConstantValueByMemory(key, CONFIGS, notExistIsNull);
}
/**
* 获取资源文件值
*
* @param key
* 资源文件key
* @return 资源文件值
*/
public static String getConstantValueByMemory(String key) {
return getConstantValueByMemory(key, true);
}
/**
* 获取资源文件值
*
* @param key
* 资源文件key
* @param notExistIsNull
* <p>
* true:如果资源文件键不存在,则返回null
* </p>
* <p>
* false:如果资源文件键不存在,则返回资源文件key
* </p>
* @param arguments
* 资源文件参数
* @return 资源文件值
*/
public static String getConstantValueByMemoryParams(String key, boolean notExistIsNull, Object... arguments) {
return getValueByParams(getConstantValueByMemory(key, notExistIsNull), arguments);
}
/**
* 获取资源文件值
*
* @param key
* 资源文件key
* @param arguments
* 资源文件参数
* @return 资源文件值
*/
public static String getConstantValueByMemoryParams(String key, Object... arguments) {
return getConstantValueByMemoryParams(key, true, arguments);
}
/**
* 配置文件内容取得带参数
*
* @param value
* @param arguments
* @return
*/
public static String getValueByParams(String value, Object... arguments) {
try {
return MessageFormat.format(value, arguments);
} catch (Exception e) {
e.printStackTrace();
return value;
}
}
/**
* 打印debug信息
*
* @return
*/
public static void debugString() {
log.debug("资源文件列表如下:");
for (String s : CONFIGS) {
log.debug("CONFIGS:" + s);
}
log.debug("CONSTANT_KEY_VALUE:" + CONSTANT_KEY_VALUE.entrySet());
}
}package zj.message.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import zj.check.util.CheckUtil;
import zj.io.util.FileUtil;
import zj.java.util.JavaUtil;
/**
* 资源文件工具类<br>
*
* @version 1.00 (2011.12.02)
* @author SHNKCS 张军 {@link <a target=_blank href="http://www.shanghaijiadun.com">上海加盾信息科技有限公司</a> <a target=_blank href="http://www.zhangjunbk.com">张军个人网站</a> <a target=_blank href="http://user.qzone.qq.com/360901061/">张军QQ空间</a>}
*/
public final class ConfigUtil implements Serializable {
// private transient static final Logger logger = Logger.getLogger(ConfigUtil.class);
private static final long serialVersionUID = 1L;
/**
* 根据配置文件的名字获取配置文件的值
*
* @param path
* 配置文件路径
* @param key
* 配置文件信息的Key
* @return
*/
public static String getConfig(String path, String key) {
// 根据配置文件的key获取配置文件的值
String value = null;
InputStream in = null;
try {
key = JavaUtil.trim(key);
path = JavaUtil.trim(path);
String rpath = FileUtil.getPathByResourceNoException(path);
if (CheckUtil.isNull(rpath)) {
in = ConfigUtil.class.getResourceAsStream(path);
} else {
File configFile = new File(rpath);
//logger.debug("配置文件路径【" + FileUtil.linuxSeparator(configFile.getAbsolutePath()) + "】");
if (!configFile.exists())
return key;
in = new FileInputStream(configFile);
}
//logger.debug("流【" + in + "】");
// 配置文件内容解析
Properties prop = new Properties();
prop.load(in);
// 根据配置文件的key获取配置文件的值
value = prop.getProperty(key);
} catch (Exception e) {
// 不做处理
value = key;
} finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e) {
}
}
return value;
}
/**
* 取得配置文件所有key和value值
*
* @param paths
* 所有路径
* @return
*/
public static Map<String, String> getConstantKeyValues(String... paths) {
return getConstantKeyValues(Arrays.asList(paths));
}
/**
* 取得配置文件所有key和value值
*
* @param paths
* 所有路径
* @return
*/
public static Map<String, String> getConstantKeyValues(List<String> ppaths) {
// 根据配置文件的key和value的值
Map<String, String> keyValues = new HashMap<String, String>();
// 去重复
List<String> paths = new ArrayList<String>();
for (String path : ppaths) {
if (!paths.contains(path)) {
paths.add(path);
}
}
for (String path : paths) {
InputStream in = null;
try {
// 当前路径中查找
// File configFile = new File(FileUtil.getPathByResourceNoException(path));
// if (!configFile.exists())
// continue;
// in = new FileInputStream(configFile);
String rpath = FileUtil.getPathByResourceNoException(path);
if (CheckUtil.isNull(rpath)) {
in = ConfigUtil.class.getResourceAsStream(path);
} else {
File configFile = new File(rpath);
//logger.debug("配置文件路径【" + FileUtil.linuxSeparator(configFile.getAbsolutePath()) + "】");
if (!configFile.exists())
continue;
in = new FileInputStream(configFile);
}
//logger.debug("流【" + in + "】");
// 配置文件内容解析
Properties prop = new Properties();
prop.load(in);
// 根据配置文件的key获取配置文件的值
Set<Map.Entry<Object, Object>> set = prop.entrySet();
for (Map.Entry<Object, Object> map : set) {
String key = JavaUtil.trim(JavaUtil.objToStr(map.getKey()));
if (key == null || key.equals("")) {
continue;
}
String value = JavaUtil.objToStr(map.getValue());
keyValues.put(key, value);
}
} catch (Exception e) {
// 不做处理
// logger.error("获取配置文件[" + path + "]错误:" + e.getMessage());
} finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e) {
}
}
}
return keyValues;
}
}
本文为张军原创文章,转载无需和我联系,但请注明来自张军的军军小站,个人博客http://www.zhangjunbk.com

