用于读/写配置的工具,下面列出了各种配置(从最高优先级到最低优先级)

代码写法:

  1 import java.io.File;
  2 import java.io.FileInputStream;
  3 import java.io.IOException;
  4 import java.io.InputStream;
  5 import java.util.Enumeration;
  6 import java.util.HashMap;
  7 import java.util.Properties;
  8
  9 import org.slf4j.Logger;
 10 import org.slf4j.LoggerFactory;
 11
 12 /**
 13  * 用于读/写配置的工具,下面列出了各种配置(从最高优先级到最低优先级):1。代码中明确的配置集。 2.从文件加载的配置。 3.默认配置。优先级较高的配置将覆盖优先级较低的配置。
 14  *
 15  */
 16 public class ConfigurationUtils
 17 {
 18
 19     private static final Logger LOGGER = LoggerFactory.getLogger(ConfigurationUtils.class);
 20
 21     private HashMap<String, String> propertyMapFromFile = new HashMap<String, String>();;
 22
 23     private HashMap<String, String> propertyMapExplicitlyDefined = new HashMap<String, String>();;
 24
 25     /**
 26      * 从文件加载配置
 27      *
 28      * @param configurationFileName文件路径,如果为null则不执行任何操作
 29      * @throws 读取配置文件时抛出IOException IO异常
 30      */
 31     public ConfigurationUtils(String configurationFileName) throws IOException
 32     {
 33
 34         if (configurationFileName == null)
 35         {
 36             return;
 37         }
 38
 39         InputStream inputStream = null;
 40         try
 41         {
 42             ClassLoader classLoader = ConfigurationUtils.class.getClassLoader();
 43             if (null != classLoader)
 44             {
 45                 inputStream = classLoader.getResourceAsStream(configurationFileName);
 46                 if(inputStream != null){
 47                     LOGGER.debug("get from classLoader");
 48                 }
 49             }
 50
 51             if (null == inputStream && this.getClass() != null)
 52             {
 53                 inputStream = this.getClass().getResourceAsStream(configurationFileName);
 54                 if(inputStream != null){
 55                     LOGGER.debug("get from class");
 56                 }
 57             }
 58
 59             if (null == inputStream && configurationFileName.startsWith("/") && null != classLoader){
 60                 inputStream = classLoader.getResourceAsStream("." + configurationFileName);
 61                 if(inputStream != null){
 62                     LOGGER.debug("get from ./");
 63                 }
 64             }
 65
 66             if (null == inputStream && configurationFileName.startsWith("/") && null != classLoader){
 67                 inputStream = classLoader.getResourceAsStream(configurationFileName.substring(1));
 68                 if(inputStream != null){
 69                     LOGGER.debug("get from no /");
 70                 }
 71             }
 72
 73             if (null == inputStream)
 74             {
 75                 inputStream = ClassLoader.getSystemResourceAsStream(configurationFileName);
 76                 if(inputStream != null){
 77                     LOGGER.debug("get from ClassLoader");
 78                 }
 79             }
 80
 81             if (null == inputStream)
 82             {
 83                 File file = new File(configurationFileName);
 84                 if(file.exists()){
 85                     inputStream = new FileInputStream(configurationFileName);
 86                     if(inputStream != null){
 87                         LOGGER.debug("get from file.");
 88                     }
 89                 }
 90             }
 91
 92             if (null == inputStream)
 93             {
 94                 LOGGER.warn("configuration file {} not found, ignore it.", configurationFileName);
 95                 return;
 96             }
 97
 98             Properties props = new Properties();
 99             props.load(inputStream);
100             for (Enumeration propNames = props.propertyNames(); propNames.hasMoreElements();)
101             {
102                 String propName = (String)propNames.nextElement();
103                 propertyMapFromFile.put(propName, props.getProperty(propName));
104             }
105             LOGGER.debug("propertyMapFromFile size : {}", propertyMapFromFile.size());
106         }
107         finally
108         {
109             if (null != inputStream)
110             {
111                 try
112                 {
113                     inputStream.close();
114                 }
115                 catch (IOException e)
116                 {
117                     LOGGER.error("IOException: " + e);
118                 }
119             }
120         }
121         return;
122     }
123
124     /**
125      * 获取属性的值字符串,如果该属性不存在,则返回defaultValue。
126      *
127      * @param propertyName属性名称
128      * @param defaultValue默认值
129      * @return property value
130      */
131
132     public String getProperty(String propertyName, String defaultValue)
133     {
134         if (propertyMapExplicitlyDefined.containsKey(propertyName))
135         {
136             return propertyMapExplicitlyDefined.get(propertyName);
137         }
138         else if (propertyMapFromFile.containsKey(propertyName))
139         {
140             return propertyMapFromFile.get(propertyName);
141         }
142         else
143         {
144             return defaultValue;
145         }
146     }
147
148     public String getProperty(String propertyName)
149     {
150         return getProperty(propertyName, null);
151     }
152
153     /**
154      * 设置属性的值。
155      *
156      * @param propertyName属性名称
157      * @param value peoperty value
158      */
159
160     public void setProperty(String propertyName, String value)
161     {
162         propertyMapExplicitlyDefined.put(propertyName, value);
163     }
164
165 }

原文地址:https://www.cnblogs.com/wangquanyi/p/11348112.html

时间: 2024-10-11 15:24:49

用于读/写配置的工具,下面列出了各种配置(从最高优先级到最低优先级)的相关文章

java读/写文件

读取文件参考:https://blog.csdn.net/weixin_42129373/article/details/82154471 写入文件参考:https://blog.csdn.net/BanketBoy/article/details/86504704 https://www.cnblogs.com/chenpi/p/5498731.html 1 package text; 2 3 import java.io.BufferedReader; 4 import java.io.Bu

开源视频会议bigbluebutton开发(2)——配置命令工具

转自:http://yangactive.iteye.com/blog/1621712 介绍 bbb-conf是一个bbb配置命令工具,可以修改bbb的配置文件,管理bbb进程(开始,启动,重启),解决初始化所遇到问题!作为一个开发人员,通过看bbb-conf的源码,可以帮助理解bbb不同的部件以及他们之间如何协作! 操作 如果你输入bbb-conf,而不带任何参数,可以看到如下可允许的命令操作列表! Java代码   bbb-conf [options] Configuration: --se

新书出版《.NET框架设计—模式、配置、工具》感恩回馈社区!

很高兴我的第一本书由图灵出版社出版.本书总结了我这些年来对框架学习.研究的总结,里面纯干货,无半句废话. 书的详情请看互动网的销售页面:http://product.china-pub.com/3770890 精彩推荐: “这本书最大的价值就在于告诉你如何在实战中运用平时学到的知识,如何站在不同的角度分析和解决问题.与市面上其他图书不同,这本书中的内容都是清培在工作中遇到实际问题后分析得出的经验.对我而言,里面的各种设计都具有独到的见解,往往能将复杂的问题简化成优雅的模式.”  ——刘星亮,携程

Hive整合HBase——通过Hive读/写 HBase中的表

写在前面一: 本文将Hive与HBase整合在一起,使Hive可以读取HBase中的数据,让Hadoop生态系统中最为常用的两大框架互相结合,相得益彰. 写在前面二: 使用软件说明 约定所有软件的存放目录: /home/yujianxin 一.Hive整合HBase原理 Hive与HBase整合的实现是利用两者本身对外的API接口互相进行通信,相互通信主要是依靠hive-hbase-handler-0.9.0.jar工具类,如下图 Hive与HBase通信示意图 二.具体步骤 安装前说明 1.关

ubuntukylin基础 chmod 对一个文件的所有者,用户组,其他人分别添加或删除 读 写 执行 的权限

镇场文:       学儒家经世致用,行佛家普度众生,修道家全生保真,悟易理象数通变.以科技光耀善法,成就一良心博客.______________________________________________________________________________________________________ 我的系统:UbuntuKylin 16.04 LTS 64bit step0: 查看指定文件的权限 step1: 减去所有者的 读 写 执行的权限 step2: 查看执行效果

解决安装rpm包依赖关系的烦恼 - yum工具介绍及本地源配置方法

版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内容用于商业用途,将保留追究其法律责任的权利.如果有问题,请以邮箱方式联系作者([email protected]). 1.背景概述 在实际生产环境下,对于在linux系统上安装rpm包,主要面临两个实际的问题1)安装rpm包过程中,不断涌现的依赖关系问题,导致需要按照提示或者查询资料,手工安装更多的

Linux工具XFTP、Xshell(centos配置java环境 工具篇 总结一)

?Xmanager5是什么? ?安装XFTP ?安装Xshell 1.Xmanager5(官网:https://www.netsarang.com/download/software.html)是全新标准的跨平台集成解决方案.它是一个一站式解决方案,这个软件包含有以下一些产品:Xshell5,Xftp5和Xlpd5. 2.安装XFTP Xftp(csdn下载地址,含注册码:http://download.csdn.net/detail/sinat_31719925/9804890) Xftp是一

Tomcat默认工具manager管理页面访问配置

Tomcat的默认工具manager配置,在很多的生产环境中由于基本用不到.或者是不太需要使用Tomcat默认的manager管理页面时一般都会把Tomcat的默认webapp下的内容给删除了,但是如果需要使用Tomcat默认的manager来管理项目时就需要保留相应的文件目录.在Tomcat中的webapps中有如下目录:docs(Tomcat本地说明文档).examples(Tomcat相关的deamon示例).host-manager(主机头管理工具).manager(项目管理工具).RO

Tomcat 8默认工具manager管理页面访问配置

Tomcat 8默认工具manager管理页面访问配置 1. 分配相关的角色权限 需要配置的配置文件是${catalina.home}/conf/tomcat-users.xml先给Tomcat访问相关的功能分配角色和配置登录验证用户密码: <role rolename="manager-gui"/> <role rolename="manager-script"/> <role rolename="manager-jmx&q