java操作properties配置文件

互联网 17-2-17
Java中有个类Properties(Java.util.Properties),主要用于读取Java的配置文件,将一些可能需要变化的值存放在properties中进行配置,通常为为.properties文件,其实就是普通的文本文件,文件的内容的格式是“键=值”的格式,文本注释信息可以用"#"来注释。尽量使用UTF-8格式存储。jdk自身提供的类有缺点,所以我们通常使用 commons-configuration框架进行解析。

1.1.1. Properties类图

1.1.2. 读取Properties配置文件比较常用的方式

1。使用java.lang.Class类的getResourceAsStream(String name)方法InputStream in = getClass().getResourceAsStream("文件名称");

2.使用流的方式操作

InputStream in = new BufferedInputStream(new FileInputStream(filepath));

1.1.3. 缺点

1.格式必须是k=v 不能有空格。

2.不能定时刷新变化的值(比如线上环境修改值程序读取到的还是旧值)。需要自己写程序控制。

3.值都是string类型需要自己获取的时候根据需求转换。

基于上面的缺点我们可以使用org.apache.commons.configuration类解决下面是日常开发中读取properties封装

1.1.4. commons-configuration框架的使用

1.1.4.1. maven包导入

 <dependency>          <groupId>commons-configuration</groupId>          <artifactId>commons-configuration</artifactId>          <version>1.8</version>  </dependency>

1.1.4.2. 工具类封装

package cn.xhgg.common.configuration;     import java.util.HashMap;  import java.util.Iterator;  import java.util.List;  import java.util.Map;  import java.util.concurrent.ConcurrentHashMap;     import org.apache.commons.configuration.ConfigurationException;  import org.apache.commons.configuration.PropertiesConfiguration;  import org.apache.commons.configuration.reloading.FileChangedReloadingStrategy;  import org.apache.commons.lang.StringUtils;  import org.slf4j.Logger;  import org.slf4j.LoggerFactory;     /**   * 这个类型的配置,文件首先需要有配置文件,其次配置文件应该写入该类,再则配置文件的编码方式必须是UTF8   */  public class PropertiesConfigUtil {  private static Logger log = LoggerFactory.getLogger(PropertiesConfigUtil.class);     public static final String PROPS_SUFFIX = ".properties";  private static Map<String, PropertiesConfiguration> configMap = new ConcurrentHashMap<String, PropertiesConfiguration>();  private static PropertiesConfiguration getConfig(String configName) {  //去除空格  configName = configName.trim();  //有后缀使用后缀 没后缀 添加后缀  String configSig = StringUtils.endsWith(configName, PROPS_SUFFIX) ? configName : configName+PROPS_SUFFIX;  if (configMap.containsKey(configSig)) {  return configMap.get(configSig);  }  PropertiesConfiguration config = null;  try {  config=new PropertiesConfiguration();  config.setEncoding("UTF-8");  config.load(configSig);  //默认五秒检查一次  config.setReloadingStrategy(new FileChangedReloadingStrategy());  config.setThrowExceptionOnMissing(true);  configMap.put(configSig, config);  } catch (ConfigurationException e) {  e.printStackTrace();  }  return config;  }  public static Map<String, String> getKeyValuePairs(String configSig) {  PropertiesConfiguration config = getConfig(configSig);  if (config == null) {  return null;  }  Iterator<String> iters = config.getKeys();  Map<String, String> retMap = new HashMap<String, String>();  while (iters.hasNext()) {  String beforeKey = iters.next();  if (retMap.containsKey(beforeKey)) {  log.warn(configSig + " configKey:" + beforeKey + " repeated!!");  }  retMap.put(beforeKey, config.getString(beforeKey));  }  return retMap;  }  /**   * 通过PropertiesConfiguration取得参数的方法   * <p>   *    * @return 。   */  static public String getString(String configSig, String key) {  return getConfig(configSig).getString(key);  }     static public String getString(String configSig, String key, String defaultValue) {  return getConfig(configSig).getString(key, defaultValue);  }     static public int getInt(String configSig, String key) {  return getConfig(configSig).getInt(key);  }     static public int getInt(String configSig, String key, int defaultValue) {  return getConfig(configSig).getInt(key, defaultValue);  }     static public boolean getBoolean(String configSig, String key) {  return getConfig(configSig).getBoolean(key);  }     static public boolean getBoolean(String configSig, String key, boolean defaultValue) {  return getConfig(configSig).getBoolean(key, defaultValue);  }     static public double getDouble(String configSig, String key) {  return getConfig(configSig).getDouble(key);  }     static public double getDouble(String configSig, String key, double defaultValue) {  return getConfig(configSig).getDouble(key, defaultValue);  }     static public float getFloat(String configSig, String key) {  return getConfig(configSig).getFloat(key);  }     static public float getFloat(String configSig, String key, float defaultValue) {  return getConfig(configSig).getFloat(key, defaultValue);  }     static public long getLong(String configSig, String key) {  return getConfig(configSig).getLong(key);  }     static public long getLong(String configSig, String key, long defaultValue) {  return getConfig(configSig).getLong(key, defaultValue);  }     static public short getShort(String configSig, String key) {  return getConfig(configSig).getShort(key);  }     static public short getShort(String configSig, String key, short defaultValue) {  return getConfig(configSig).getShort(key, defaultValue);  }     static public List<Object> getList(String configSig, String key) {  return getConfig(configSig).getList(key);  }     static public List<Object> getList(String configSig, String key, List<Object> defaultValue) {  return getConfig(configSig).getList(key, defaultValue);  }     static public byte getByte(String configSig, String key) {  return getConfig(configSig).getByte(key);  }     static public byte getByte(String configSig, String key, byte defaultValue) {  return getConfig(configSig).getByte(key, defaultValue);  }     static public String[] getStringArray(String configSig, String key) {  return getConfig(configSig).getStringArray(key);  }  }

1.1.4.3. 引入properties测试文件

rabbitmq.properties配置如下:

#rpc 模式rmq  rpc.rabbit.host=l-opsdev3.ops.bj0.jd.com  rpc.rabbit.port=5672  rpc.rabbit.username=jd_vrmphoto  rpc.rabbit.password=jd_vrmphoto  rpc.rabbit.vhost=jd/vrmphoto  rpc.rabbit.queue=rpc_queue  rpc.rabbit.exchange=photoworker  rpc.rabbit.key=photoworker.rpc

1.1.4.4. 测试

PropertiesConfigUtil config=new PropertiesConfigUtil();  String username = config.getString("rabbitmq", "rpc.rabbit.username");  System.out.println(username);

输出结果:

jd_vrmphoto

ok,大功告成。

1.1.4.5. 注意事项

1.编码最好UTF-8统一。

ReloadingStrategy策略选择。可以看具体的实现类和使用场景。我用的一般是FileChangedReloadingStrategy类。

以上就是java操作properties配置文件的内容,更多相关内容请关注PHP中文网(www.php.cn)!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:android XPath 解析xml

相关资讯