常量资源文件工具类

张军 799 0
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>&nbsp;&nbsp;&nbsp;&nbsp;<a target=_blank href="http://www.zhangjunbk.com">张军个人网站</a>&nbsp;&nbsp;&nbsp;&nbsp;<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>&nbsp;&nbsp;&nbsp;&nbsp;<a target=_blank href="http://www.zhangjunbk.com">张军个人网站</a>&nbsp;&nbsp;&nbsp;&nbsp;<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;
	}
}



更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论