java:java.util.Properties的便利性封装
来源:互联网 发布:淘宝购物车是什么意思 编辑:程序博客网 时间:2024/06/05 16:09
java.util.Properties
是个常用的类,主要用于保存参数,从文件中加载配置参数,为了更方便使用,可以对它做进一步的封装。
下是面封装后的类Configuration,增加了以下方法: getProperty<primitive>(String)
系列方法 getProperty<primitive>(String key, <primitive> defaultValue)
系列方法 setProperty<primitive>(String key, <primitive>value)
系列方法。
用于自动转换基本类型的参数值。
增加了以下不同参数的构造函数更方便参数文件加载
Configuration(ClassLoader classLoader,String propFile)Configuration(File propFile)Configuration(URL url)
另外增加了setPrefix(String prefix)
方法可以用于相同前缀的参数的读取。
/** * @Title: Configuratoin.java * @Package net.gdface.utils * @Description: 管理properties文件 * @author guyadong * @date 2014-10-14 下午3:20:09 * @version V1.0 */package net.gdface.utils;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.lang.reflect.InvocationTargetException;import java.net.URL;import java.util.Properties;/**读取配置文件(properties)中的参数 * @author guyadong * */public class Configuration extends Properties{ private static final long serialVersionUID = -3929851625670931787L; /** * property 属性名前缀,在调用{@link #getProperty(String)}或其他getProperty方法时参数会自动加上该前缀,默认为"", * 如prefix为 net.gdface.facedbsdk.FaceDbSDKLocal * 调用getProperty("minThread")时,其实是执行getProperty("net.gdface.facedbsdk.FaceDbSDKLocal.minThread") */ private ThreadLocal<String> prefixs = new ThreadLocal<String>() { @Override protected String initialValue() { return "";//prefix初始值为"" } }; /**使用指定的ClassLoader加载properties文件propFile * @param classLoader * @param propFile * @throws IOException * @see #configure(URL) */ public Configuration(ClassLoader classLoader,String propFile) throws IOException { URL url= classLoader.getResource(propFile); if(null==url) throw new IOException(String.format("Cant found resource [%s] by %s",propFile,classLoader.getClass().getName())); configure(url); } /** * 从{@link File}构造对象 * @param propFile * @throws IOException */ public Configuration(File propFile) throws IOException { this(propFile.toURI().toURL()); } public Configuration() { super(); } public Configuration(Properties defaults) { super(defaults); } /** * @param url * @throws IOException */ public Configuration(URL url) throws IOException { configure(url); } /** * 根据{@link URL}加载配置文件 * @param url * @throws IOException * @see #configure(InputStream) */ private void configure(URL url) throws IOException { if(null==url) throw new NullPointerException("parameter [url] is null"); System.out.printf("Load properties from [%s]\n", url.toString()); InputStream is = url.openStream(); try { load(is); } finally { is.close(); } } /** * 读取指定的key,用静态valueOf方法(如果有)将之转换成clazz指定的类型<br> * 适用于{@link Number},{@link Boolean}类型,如果key不存在或为空或转换出错则返回null * * @param key * @param clazz * @return */ @SuppressWarnings("unchecked") private <T> T _getPropertyBaseType(String key, Class<T> clazz) { if (null == key||0==key.length()) throw new IllegalArgumentException("the argument 'key' must not be null or empty"); if (null == clazz) throw new IllegalArgumentException("the argument 'clazz' must not be null"); String value = getProperty(key); try { return null == value|| 0 == value.length() ? null : (T) clazz.getMethod("valueOf", String.class).invoke(null, value.trim()); } catch (NoSuchMethodException e) { new RuntimeException( String.format("%s:not found static method 'valueOf' for %s", e.getClass().getSimpleName(), clazz.getName()), e); } catch (IllegalAccessException e) { new RuntimeException( String.format("%s:can't invoke method 'valueOf' for %s", e.getClass().getSimpleName(), clazz.getName()), e); } catch (InvocationTargetException e) { try { throw e.getCause(); } catch (NumberFormatException ie) { System.out.printf("%s: [%s=%s] can't be convert to %s\n", e.getClass().getSimpleName(), key, value, clazz.getName()); } catch (Throwable ie) { new RuntimeException(ie); } } return null; } /** * 设置指定的key为value * * @param key * 为{@link null}时抛出 {@link IllegalArgumentException}<br> * 适用于{@link Number},{@link Boolean}类型 * @param value * 为{@code null}时删除key并返回{@code null} * @return 用静态valueOf方法返回key原来的值 */ @SuppressWarnings("unchecked") private <T> T _setPropertyBaseType(String key, T value) { if (null == key||0==key.length()) throw new IllegalArgumentException("the argument 'key' must not be null or empty"); // value为null时删除key,并返回null if(null==value){remove(key);return null;} try { String old = (String) setProperty(key,value.toString()); return null == old|| 0 == old.length() ? null : (T) value.getClass().getMethod("valueOf", String.class).invoke(null, old.trim()); } catch (NoSuchMethodException e) { new RuntimeException( String.format("%s:not found static method 'valueOf' for %s", e.getClass().getSimpleName(), value.getClass().getName()), e); } catch (IllegalAccessException e) { new RuntimeException( String.format("%s:can't invoke method 'valueOf' for %s", e.getClass().getSimpleName(), value.getClass().getName()), e); } catch (InvocationTargetException e) { try { throw e.getCause(); } catch (NumberFormatException ie) { System.out.printf("%s: [%s=%s] can't be convert to %s\n", e.getClass().getSimpleName(), key, value.toString(), value.getClass().getName()); } catch (Throwable ie) { new RuntimeException(ie); } } return null; } @Override public String getProperty(String key) { return super.getProperty(this.getPrefix()+key); } @Override public String getProperty(String key, String defaultValue) { return super.getProperty(this.getPrefix()+key, defaultValue); } @Override public synchronized Object setProperty(String key, String value) { return super.setProperty(this.getPrefix()+key, value); } /**读取指定的key,将之转换成与defaultValue类型相同的对象,如果key不存在或转换出错则返回defaultValue * @param key * @param defaultValue 缺省值 * @return */ public <T> T getPropertyBaseType(String key, T defaultValue) { if (null == defaultValue) throw new IllegalArgumentException("the argument 'defaultValue' must not be null"); @SuppressWarnings("unchecked") T res = (T) _getPropertyBaseType(key,defaultValue.getClass()); return ((null==res)?defaultValue:res); } public Boolean getPropertyBoolean(String key) { return _getPropertyBaseType(key, Boolean.class); } public boolean getPropertyBoolean(String key, Boolean defaultValue) { return getPropertyBaseType(key, defaultValue); } public Byte getPropertyByte(String key) { return _getPropertyBaseType(key, Byte.class); } public Byte getPropertyByte(String key,Byte defaultValue) { return getPropertyBaseType(key, defaultValue); } public Double getPropertyDouble(String key) { return _getPropertyBaseType(key, Double.class); } public Double getPropertyDouble(String key,Double defaultValue) { return getPropertyBaseType(key, defaultValue); } public Float getPropertyFloat(String key) { return _getPropertyBaseType(key, Float.class); } public Float getPropertyFloat(String key,Float defaultValue) { return getPropertyBaseType(key, defaultValue); } public Integer getPropertyInteger(String key) { return _getPropertyBaseType(key, Integer.class); } public Integer getPropertyInteger(String key,Integer defaultValue) { return getPropertyBaseType(key, defaultValue); } public Long getPropertyLong(String key) { return _getPropertyBaseType(key, Long.class); } public Long getPropertyLong(String key,Long defaultValue) { return getPropertyBaseType(key, defaultValue); } public Short getPropertyShort(String key) { return _getPropertyBaseType(key, Short.class); } public Short getPropertyShort(String key,Short defaultValue) { return getPropertyBaseType(key, defaultValue); } ////////////// public boolean setPropertyBoolean(String key, Boolean value) { return _setPropertyBaseType(key, value); } public Byte setPropertyByte(String key,Byte value) { return _setPropertyBaseType(key, value); } public Double setPropertyDouble(String key,Double value) { return _setPropertyBaseType(key, value); } public Float setPropertyFloat(String key,Float value) { return _setPropertyBaseType(key, value); } public Integer setPropertyInteger(String key,Integer value) { return _setPropertyBaseType(key, value); } public Long setPropertyLong(String key,Long value) { return _setPropertyBaseType(key, value); } public Short setPropertyShort(String key,Short value) { return _setPropertyBaseType(key, value); } /**如果参数为null,则prefix设置为"" * @param prefix 要设置的 prefix * @return */ public Configuration setPrefix(String prefix) { prefixs.set(null==prefix?"":prefix); return this; } /** * @return prefix */ public String getPrefix() { return prefixs.get(); }}
0 0
- java:java.util.Properties的便利性封装
- java.util.Properties的使用
- java.util.Properties的使用
- java.util.Properties的使用
- Properties类(java.util.Properties)
- java.util.Properties类
- java.util.Properties类
- 类 java.util.Properties
- 浅谈java.util.Properties
- java.util.properties用法
- java.util.properties
- java.util.Properties类
- java.util.Properties
- java.util.Properties 配置文件
- java.util.Properties类
- java.util.Properties类
- java.util.Properties类
- Java.util.Properties类
- dubbo+zookeeper+dubbo管理控制台实践demo
- 对称加密和非对称加密总结
- HDU4009 Transfer water(最小树形图)
- RecordSortedList应用实例
- 使用CATransition动画来进行图像翻转效果,实用性很强
- java:java.util.Properties的便利性封装
- torch/caffe等框架下解决内存无法garbage collection的问题
- JOOQ 官网 3.8API
- UIScrollviewview上添加button不显示和button滑动超出范围问题
- OC Category 分类 Extension 延展.md
- MATLAB 内存不足 "Out of memory" 解决办法
- >>>,<< ,<< java中的三种移位运算符
- 面试题及答案
- 【SPOJ375】Query on a tree-树链剖分