JAVA 处理properties

原创
2019/06/06 23:42
阅读数 113

 



import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 此工具将用于加载properties文件
 * 
 * @author 28923
 *
 */
public class PropUtil {

	/**
	 * 用于存储所有的键值对 如果多个一样的键,那么只保留最后加载的值
	 */
	private static ConcurrentHashMap<String, Object> commonCache = new ConcurrentHashMap<String, Object>();
	/**
	 * 每次加载的配置文件都进行分文件存储
	 */
	private static ConcurrentHashMap<String, Properties> filesCache = new ConcurrentHashMap<String, Properties>();

	/**
	 * 获取所有属性
	 * @return
	 */
	public static Map<String, Object> getAll(){
		return commonCache;
	}
	/*
	 * 编码格式,默认utf-8
	 */
	private static String defEncoding = "utf-8";

	/**
	 * 获取当前设置的编码格式
	 * 
	 * @return
	 */
	public static String getDefEncoding() {
		return defEncoding;
	}

	/**
	 * 设置加载文件的编码格式
	 * 
	 * @param defEncoding
	 */
	public static void setDefEncoding(String defEncoding) {
		PropUtil.defEncoding = defEncoding;
	}

	/**
	 * 加载配置文件
	 * 	加载的位置从  WEB-INF/classes  开始
	 * 如果是maven项目,resources文件夹内的文件默认会被打包到 WEB-INF/classes 文件及下
	 * @param fileName 配置文件名 只支持加载properties
	 * @param encoding 编码格式 默认utf-8
	 */
	public static void loadfileFromClassPath(String fileName, String encoding) {
		if (!fileName.endsWith(".properties")) {
			fileName += ".properties";
		}
		if (null == encoding) {
			encoding = defEncoding;
		}
		try {
			String fp = PropUtil.class.getClassLoader().getResource(fileName).getPath();
			loadfile(fp, encoding);
		} catch (Exception e) {
			throw new IllegalArgumentException("File not found : " + fileName);
		}
	}

	/**
	 * 加载配置文件
	 * 加载的位置从  WEB-INF/classes  开始
	 * 如果是maven项目,resources文件夹内的文件默认会被打包到 WEB-INF/classes 文件及下
	 * @param fileNames 文件名集合  只支持加载properties
	 */
	public static void loadfilesFromClassPath(String... fileNames) {
		for (String fn : fileNames) {
			loadfileFromClassPath(fn, null);
		}
	}
	
	/**
	 * 
	 * @param filePath 完整的文件路径,并且只支持加载properties
	 * @param encoding 编码格式 默认utf-8
	 */
	public static void loadfile(String filePath, String encoding) {
		if (!filePath.endsWith(".properties")) {
			filePath += ".properties";
		}
		if (null == encoding) {
			encoding = defEncoding;
		}
		try (FileInputStream fis = new FileInputStream(filePath)) {
			Properties pro = new Properties();
			pro.load(new InputStreamReader(fis,encoding));
			filesCache.put(filePath, pro);
			pro.forEach((k, v) -> {
				commonCache.put(k.toString(), null == v ? null : v);
			});
		} catch (IOException e) {
			throw new RuntimeException("Error loading properties file.", e);
		}
	}
	/**
	 * 加载配置文件
	 * @param fileNames 文件路径集合  只支持加载properties
	 */
	public static void loadfiles(String... filePaths) {
		for (String fn : filePaths) {
			loadfile(fn, null);
		}
	}

	/**
	 * 获取到类型进行转换值(目前无效,因为properties文件存储的值全部都是string)
	 * @param key
	 * @param fileName  可以指定从哪个文件获取值(需要先调用load加载配置文件) ,如果没有指定文件,则默认从全局缓存获取
	 * @param classType 可以指定返回什么类型的数据,如果无法转换成所需数据类型,则返回null 不支持boolean类型
	 * @return 如果没有获取到则返回null
	 */
	@Deprecated
	public static <T> T get4Type(String key, String fileName, Class<T> classType) {
		Object vale = getObject(key, fileName);
		if (null == vale) {
			return null;
		} else {
			try {
				T cast = classType.cast(vale);
				return cast;
			} catch (Exception e) {
				e.printStackTrace();
				return null;
			}
		}

	}

	/**
	 * 
	 * @param key
	 * @param fileName 可以指定从哪个文件获取值(需要先调用load加载配置文件),如果没有指定文件,则默认从全局缓存获取
	 * @return 如果没有获取到则返回null
	 */
	public static String getStr(String key, String fileName) {
		Object vale = getObject(key, fileName);
		if (null == vale || vale.toString().trim().length() == 0) {
			return null;
		} else {
			return vale.toString().trim();
		}
	}

	/**
	 * 
	 * @param key
	 * @return 如果没有获取到则返回null
	 */
	public static String getStr(String key) {
		return getStr(key, null);
	}

	/**
	 * 
	 * @param key
	 * @param fileName 可以指定从哪个文件获取值(需要先调用load加载配置文件),如果没有指定文件,则默认从全局缓存获取
	 * @return 如果没有获取到则返回null
	 */
	public static Object getObject(String key, String fileName) {
		if (null != fileName) {
			Properties pro = filesCache.get(fileName);
			if (null == pro) {
				return null;
			} else {
				return null == pro.get(key) ? null : pro.get(key);
			}
		} else {
			return null == commonCache.get(key) ? null : commonCache.get(key);
		}
	}

	/**
	 * 
	 * @param key
	 * @return 如果没有获取到则返回null
	 */
	public static Object getObject(String key) {
		return getObject(key, null);
	}

	/**
	 * 
	 * @param key
	 * @return 如果没有获取到则返回null
	 */
	public static Integer getInteger(String key) {
		return getInteger(key, null);
	}

	/**
	 * 
	 * @param key
	 * @param fileName 可以指定从哪个文件获取值(需要先调用load加载配置文件),如果没有指定文件,则默认从全局缓存获取
	 * @return 如果没有获取到则返回null
	 */
	public static Integer getInteger(String key, String fileName) {
		String str = getStr(key, fileName);
		if (null != str && str.matches("\\d+")) {
			return Integer.parseInt(str);
		}
		return null;
	}

	/**
	 * 
	 * @param key
	 * @return 如果没有获取到则返回null
	 */
	public static Boolean getBoolean(String key) {
		return getBoolean(key, null);
	}

	/**
	 * 
	 * @param key
	 * @param fileName 可以指定从哪个文件获取值(需要先调用load加载配置文件),如果没有指定文件,则默认从全局缓存获取
	 * @return 如果没有获取到则返回null
	 */
	public static Boolean getBoolean(String key, String fileName) {
		String str = getStr(key, fileName);
		if ("true".equalsIgnoreCase(str)) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * 
	 * @param key
	 * @return 如果没有获取到则返回null
	 */
	public static Long getLong(String key) {
		return geLong(key, null);
	}

	/**
	 * 
	 * @param key
	 * @param fileName 可以指定从哪个文件获取值(需要先调用load加载配置文件),如果没有指定文件,则默认从全局缓存获取
	 * @return 如果没有获取到则返回null
	 */
	public static Long geLong(String key, String fileName) {
		String str = getStr(key, fileName);
		if (null != str && str.matches("\\d+")) {
			return Long.parseLong(str);
		}
		return null;
	}

	/**
	 * 
	 * @param key
	 * @return 如果没有获取到则返回null
	 */
	public static Double getDouble(String key) {
		return getDouble(key, null);
	}

	/**
	 * 
	 * @param key
	 * @param fileName 可以指定从哪个文件获取值(需要先调用load加载配置文件),如果没有指定文件,则默认从全局缓存获取
	 * @return 如果没有获取到则返回null
	 */
	public static Double getDouble(String key, String fileName) {
		String str = getStr(key, fileName);
		if (null != str && str.matches("\\d+(\\.\\d+)?")) {
			return Double.parseDouble(str);
		}
		return null;
	}

}

 

展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部