Configutation读取properties文件信息

commons configuration可以很方便的访问配置文件和xml文件中的的内容。Commons Configuration 是为了提供对属性文件、XML文件、JNDI资源、来自JDBC Datasource数据的访问。

  官方文档:http://commons.apache.org/proper/commons-configuration/

我们研究configuration1版本的,最新的是2的版本,暂时没使用。

1、Maven中引入相关的jar

<!-- 配置文件读取 --><dependency><groupId>commons-configuration</groupId><artifactId>commons-configuration</artifactId><version>1.5</version></dependency><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.10</version></dependency>

2、读取properties文件的内容

(1)新建一个data.properties

name=parry
port=21
flag=true
users=Tom,parry

(2)工具类读取

package icp;import java.util.List;import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.commons.configuration.reloading.FileChangedReloadingStrategy;public class Test {public static final String fileName = "data.properties";public static PropertiesConfiguration cfg = null;static {try {cfg = new PropertiesConfiguration(fileName);} catch (ConfigurationException e) {e.printStackTrace();}// 当文件的内容发生改变时,配置对象也会刷新cfg.setReloadingStrategy(new FileChangedReloadingStrategy());}// 读Stringpublic static String getStringValue(String key) {return cfg.getString(key);}// 读intpublic static int getIntValue(String key) {return cfg.getInt(key);}// 读booleanpublic static boolean getBooleanValue(String key) {return cfg.getBoolean(key);}// 读Listpublic static List<?> getListValue(String key) {return cfg.getList(key);}// 读数组public static String[] getArrayValue(String key) {return cfg.getStringArray(key);}}

 

(3)测试

public static void main(String[] args) {String name = Test.getStringValue("name");System.out.println("name:" + name);int port = Test.getIntValue("port");System.out.println("port:" + port);boolean flag = Test.getBooleanValue("flag");System.out.println("flag:" + flag);List<String> users = (List<String>) Test.getListValue("users");for (String user : users) {System.out.println("user:" + user);}}

 

3、读取XML配置文件

(1)新建一个XMl文件

<?xml version="1.0" encoding="UTF-8"?>
<config><database><url>127.0.0.1</url><port>1521</port><login>admin</login><password>pass</password></database>
</config>

(2)读取XML配置的工具文件

package icp;import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.XMLConfiguration;
import org.apache.commons.configuration.reloading.FileChangedReloadingStrategy;public class XmlTest {public static final String fileName = "XMLProperties.xml";public static XMLConfiguration cfg = null;static {try {cfg = new XMLConfiguration(fileName);} catch (ConfigurationException e) {e.printStackTrace();}// 配置文件 发生变化就重新加载cfg.setReloadingStrategy(new FileChangedReloadingStrategy());}public static String getStringValue(String key) {return cfg.getString(key);}public static int getIntValue(String key) {return cfg.getInt(key);}
}

这里只是添加读取String 和读取Int的方法,其他的方法类似。

(3)测试

public static void main(String[] args) {String url = XmlTest.getStringValue("database.url");System.out.println("url:" + url);int port =XmlTest.getIntValue("database.port");System.out.println("port:"+port);}

由于项目中,经常有多个配置文件,最后提供一个工具类:

public class PropertiesUtil {public static Map<String, Object> configMap = new ConcurrentHashMap<String, Object>();public static String getStringValue(String fileName, String key) {if (!configMap.containsKey(key)) {PropertiesUtil.initConfig(fileName);}if (fileName.endsWith(".properties")) {PropertiesConfiguration cfg = (PropertiesConfiguration) configMap.get(fileName);return cfg.getString(key);} else if (fileName.endsWith(".xml")) {XMLConfiguration cfg = (XMLConfiguration) configMap.get(fileName);return cfg.getString(key);}return null;}private static void initConfig(String fileName) {try {if (fileName.endsWith(".xml")) {XMLConfiguration cfg = new XMLConfiguration(fileName);configMap.put(fileName, cfg);} else if (fileName.endsWith(".properties")) {PropertiesConfiguration cfg = new PropertiesConfiguration(fileName);configMap.put(fileName, cfg);}} catch (ConfigurationException e) {e.printStackTrace();}}
}

测试:

public static void main(String[] args) {String name= PropertiesUtil.getStringValue("data.properties", "name");System.out.println(name);String url = PropertiesUtil.getStringValue("data.xml", "database.url");System.out.println(url);}

 

非原创,来源地址:https://www.cnblogs.com/parryyang/p/6197685.html

转载于:https://www.cnblogs.com/lr393993507/p/9577712.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/413406.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript 所有数据类型

JavaScript 所有数据类型 在 JavaScript 中有 5 种不同的数据类型&#xff1a; stringnumberbooleanobjectfunction 3 种对象类型&#xff1a; ObjectDateArray 2 个不包含任何值的数据类型&#xff1a; nullundefined 可以使用 typeof 操作符来查看 JavaScript 变量的数据…

[css] 使用css的attr()写一个类似a标签title的提示框

[css] 使用css的attr()写一个类似a标签title的提示框 .box{position:relative;}.box:hover{content: attr(data-title); display: inline-block;padding: 10px 14px;border: 1px solid #ddd;border-radius: 5px;position: absolute;top: -50px;left: -10px;}个人简介 我是歌…

JavaScript 严格模式(use strict)

使用 "use strict" 指令 "use strict" 指令在 JavaScript 1.8.5 (ECMAScript5) 中新增。 它不是一条语句&#xff0c;但是是一个字面量表达式&#xff0c;在 JavaScript 旧版本中会被忽略。 "use strict" 的目的是指定代码在严格条件下执行。…

IO 概括

# 一、概览 Java 的 I/O 大概可以分成以下几类&#xff1a; - 磁盘操作&#xff1a;File- 字节操作&#xff1a;InputStream 和 OutputStream- 字符操作&#xff1a;Reader 和 Writer- 对象操作&#xff1a;Serializable- 网络操作&#xff1a;Socket- 新的输入/输出&#xff1…

JavaScript this 关键字

面向对象语言中 this 表示当前对象的一个引用。 但在 JavaScript 中 this 不是固定不变的&#xff0c;它会随着执行环境的改变而改变。 在方法中&#xff0c;this 表示该方法所属的对象。如果单独使用&#xff0c;this 表示全局对象。在函数中&#xff0c;this 表示全局对象。…

[css] 鼠标事件css的:hover和js的mouseover有什么区别?

[css] 鼠标事件css的:hover和js的mouseover有什么区别&#xff1f; JavaScript中鼠标事件有&#xff1a;onmouseover和onmouseout&#xff1a; 当鼠标移入和移出时触发事件onmousedown和onmouseup&#xff1a; 当鼠标按钮被按下或者松开时触发事件onclick和ondbclick &#xf…

【一步一步学习spring】spring入门

1. spring概述 spring是一个开源框架spring为简化企业级应用开发而生&#xff0c;解决的是业务逻辑层和其他各层的松耦合问题&#xff0c;他将面向接口的编程思想贯穿整个系统应用。spring是javaSE/EE的一站式框架。web层有spring-mvc&#xff0c;业务层有spring ioc、事务等机…

JavaScript 操作 HTML DOM (文档对象模型) 相关知识点

HTML DOM 树 通过可编程的对象模型&#xff0c;JavaScript 获得了足够的能力来创建动态的 HTML。 JavaScript 能够改变页面中的所有 HTML 元素JavaScript 能够改变页面中的所有 HTML 属性JavaScript 能够改变页面中的所有 CSS 样式JavaScript 能够对页面中的所有事件做出反应…

[css] 举例说明你对指针事件(pointer-events)的理解

[css] 举例说明你对指针事件&#xff08;pointer-events&#xff09;的理解 pointer-events CSS 属性指定在什么情况下 (如果有) 某个特定的图形元素可以成为鼠标事件的 target。 当point-events 为none时&#xff0c;比如a连接不再生效个人简介 我是歌谣&#xff0c;欢迎和大…

JS运行三部曲

语法分析 预编译 解释执行 下面两句话能解决问题&#xff0c;但解决不了深入的问题&#xff0c;其实原理是 预编译产生的两个现象&#xff08;规律&#xff09;。 函数声明整体提升变量 声明提升 预编译前奏 imply global 暗示全局变量&#xff1a;即任何变量&#xff…

[BZOJ3791]作业

Description 众所周知&#xff0c;白神是具有神奇的能力的。比如说&#xff0c;他对数学作业说一声“数”&#xff0c;数学作业就会出于畏惧而自己完成&#xff1b;对语文作业说一声“语”&#xff0c;语文作业就会出于畏惧而自己完成。今天&#xff0c;语文老师和数学老师布置…

[css] 如何用css实现把“我不爱996”变成“699爱不我”?

[css] 如何用css实现把“我不爱996”变成“699爱不我”&#xff1f; unicode-bidi 属性与 direction 属性一起使用&#xff0c;来设置或返回文本是否被重写&#xff0c;以便在同一文档中支持多种语言。 用direction属性设置rtl表示从右到左&#xff0c;默认是ltr从左到右的&am…

[css] scroll-snap-align属性的应用场景是什么?

[css] scroll-snap-align属性的应用场景是什么&#xff1f; 滚动一个列表时&#xff0c;控制列表中一个块始终完全在可视区内,如果滚动到一半可以回弹&#xff0c;保持整个块都在可视区。个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c;…

STM32 软件模拟 IIC 代码,标准库、HAL库可用

1 #ifndef _IIC_H2 #define _IIC_H3 4 #include "stdio.h" 5 #include "stm32f1xx_hal.h"6 7 8 /* 定义控制 SDA SCL 的宏 标准库版9 #define I2C_SDA_UP GPIO_SetBits (GPIOC,GPIO_PIN_8) //SDA高电平 10 #define I2C_SDA_LOW GPIO_…

作用域及上下文理解

书本中的解释 [[scope]]:每个javascript函数都是一个对象&#xff0c;对象中有些属性我们可以访问&#xff0c;但有些不可以&#xff0c;这些属性仅供javascript引擎存取&#xff0c;[[scope]]就是其中一个。[[scope]]:指的就是我们所说的作用域&#xff0c;其中存储了运行期上…

[css] css中Scroll-behavior属性有什么应用场景?

[css] css中Scroll-behavior属性有什么应用场景&#xff1f; 当用户手动点击导航或者API调用导致触发滚动操作时&#xff0c;scroll-behavior属性可以为滚动框设定滚动行为。auto表示立即滚动到指定位置&#xff0c;smooth则表示平滑过渡&#xff0c;需要一定的过度时间滚动到…

windows下安装ElasticSearch的Head插件

es5以上版本安装head需要安装node和grunt(之前的直接用plugin命令即可安装) (一)从地址&#xff1a;https://nodejs.org/en/download/ 下载相应系统的msi&#xff0c;双击安装。 &#xff08;二&#xff09;安装完成用cmd进入安装目录执行 node -v可查看版本号 &#xff08;三&…

立即执行函数

定义&#xff1a; 此类函数没有声明&#xff0c;在一次执行过后即释放。适合做初始化工作。 //立即执行函数格式&#xff0c;此类函数执行完即销毁&#xff0c;除了这点&#xff0c;和其它函数一样 (function (){}()); W3C建议使用这种 (function (){})();//只有表达式才能被…

[css] 使用css实现对话气泡的效果

[css] 使用css实现对话气泡的效果 方法&#xff1a;使用圆角矩形作为对话的主体框&#xff0c;左侧或右侧增加附加三角形&#xff0c;三角形使用border样式设置来实现&#xff0c;相对定位和绝对定位结合使三角形附于圆角矩形左侧或右侧&#xff1b; html: <div class"…

iframe嵌套其它网站页面详解

iframe基本内涵 通常我们使用iframe直接直接在页面嵌套iframe标签指定src就可以了。 <iframe src"demo_iframe_sandbox.htm"></iframe> 但是&#xff0c;有追求的我们&#xff0c;并不是想要这么low的iframe. 我们来看看在iframe中还可以设置些什么属…