1、pom依赖添加

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

2、读取.properties文件

使用PropertiesConfiguration配置类,主要示例代码如下:

public static final String fileName = "test.properties";
public static PropertiesConfiguration cfg = null; static {
try {
cfg = new PropertiesConfiguration(fileName);
} catch (ConfigurationException e) {
e.printStackTrace();
}
// 当文件的内容发生改变时,配置对象也会刷新
cfg.setReloadingStrategy(new FileChangedReloadingStrategy());
} /**
* 读String
* @param key
* @return
*/
public static String getStringValue(String key) {
return cfg.getString(key);
} /**
* 读int
* @param key
* @return
*/
public static int getIntValue(String key) {
return cfg.getInt(key);
} /**
* 读boolean
* @param key
* @return
*/
public static boolean getBooleanValue(String key) {
return cfg.getBoolean(key);
}
/**
* 读List
*/
public static List<?> getListValue(String key) {
return cfg.getList(key);
}
/**
* 读数组
*/
public static String[] getArrayValue(String key) {
return cfg.getStringArray(key);
}

test.properties可以如下定义:

name=king
port=21
flag=true
interest=guitar,piano

之后就可以用给定的一些读取方法操作了

String name = CGPropetiesUtil.getStringValue("name");
System.out.println("String:" + name);

3、读取.xml文件

使用XMLConfiguration配置类

主要代码

  public static final String fileName = "test.xml";

    public static XMLConfiguration cfg = null;

    static {
try {
cfg = new XMLConfiguration(fileName);
} catch (Exception 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);
}

test.xml定义如下:

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

测试操作同上。

4、对于一个文件来说,他的操作就对应一个配置类,而不能使用同一个配置类操作多个文件,否则它只以读取的第一个为操作对象。针对这种情况,可以写成一个通用的读取工具,简单示例如下:

public class CGCommonUtil {

    /**
* 一个文件对应一个Configuration
*/
public static Map<String, Configuration> configMap = new ConcurrentHashMap<String, Configuration>(); /**
* 文件后缀
*/
private static final String SUFFIX_PROPERTIES = ".properties";
private static final String SUFFIX_XML = ".xml"; public static Configuration getConfig(String fileName) {
if (!configMap.containsKey(fileName)) {
CGCommonUtil.initConfig(fileName);
} Configuration cfg = configMap.get(fileName);
if (null == cfg) {
throw new IllegalArgumentException("cfg is null");
} return cfg;
} private static void initConfig(String fileName) {
Configuration cfg = null;
try {
if (fileName.endsWith(SUFFIX_XML)) {
cfg = new XMLConfiguration(fileName);
} else if (fileName.endsWith(SUFFIX_PROPERTIES)) {
cfg = new PropertiesConfiguration(fileName);
}
} catch (ConfigurationException e) {
e.printStackTrace();
}
if (null != cfg) {
configMap.put(fileName, cfg);
} else {
System.out.println("cfg is null");
}
} /**
* 读String
* @param key
* @return
*/
public static String getStringValue(Configuration cfg, String key) {
return cfg.getString(key);
} /**
* 读int
* @param key
* @return
*/
public static int getIntValue(Configuration cfg, String key) {
return cfg.getInt(key);
} /**
* 读boolean
* @param key
* @return
*/
public static boolean getBooleanValue(Configuration cfg, String key) {
return cfg.getBoolean(key);
}
/**
* 读List
*/
public static List<?> getListValue(Configuration cfg, String key) {
return cfg.getList(key);
}
/**
* 读数组
*/
public static String[] getArrayValue(Configuration cfg, String key) {
return cfg.getStringArray(key);
} public static void main(String[] args) {
Configuration config = getConfig("test.properties");
String name1 = getStringValue(config, "name");
}
}

以上可以作为一个通用的读取工具,为每一个文件都设置了一个相应的配置操作类,如果考虑本地缓存影响会影响内存的话可以考虑定时删除缓存数据操作

5、Configuration读取文件源原

入口类ConfigurationUtils

主要涉及的方法如下:

locateFromClasspath方法:

static URL locateFromClasspath(String resourceName) {
URL url = null;
ClassLoader loader = Thread.currentThread().getContextClassLoader();
if (loader != null) {
url = loader.getResource(resourceName);
if (url != null) {
LOG.debug("Loading configuration from the context classpath (" + resourceName + ")");
}
} if (url == null) {
url = ClassLoader.getSystemResource(resourceName);
if (url != null) {
LOG.debug("Loading configuration from the system classpath (" + resourceName + ")");
}
} return url;
}

首先它通过获取了当前线程的一个类加载器,通过加载器的getResouce方法去类加载器找到resourceName这个文件

getResouce方法:

public URL getResource(String name) {
URL url;
if (parent != null) {
url = parent.getResource(name);
} else {
url = getBootstrapResource(name);
}
if (url == null) {
url = findResource(name);
}
return url;
}

先去父节点的loader去加载资源文件,如果找不到,则会去BootstrapLoader中去找,如果还是找不到,才调用当前类的classLoader去找。这也就是JDK类加载的双亲委派模型。

getInputStream方法:

public InputStream getInputStream(URL url) throws ConfigurationException {
File file = ConfigurationUtils.fileFromURL(url);
if (file != null && file.isDirectory()) {
throw new ConfigurationException("Cannot load a configuration from a directory");
} else {
try {
return url.openStream();
} catch (Exception var4) {
throw new ConfigurationException("Unable to load the configuration from the URL " + url, var4);
}
}
}

调用url的openStream()方法去获得此文件的输入流

GItHub源码参照

apache commons-configuration包读取配置文件的更多相关文章

  1. Apache Commons Configuration的应用

    Apache Commons Configuration的应用 Commons Configuration是一个java应用程序的配置管理工具.可以从properties或者xml文件中加载软件的配置 ...

  2. Apache Commons Configuration读取xml配置

    近期项目自己手写一个字符串连接池.因为环境不同有开发版本.测试版本.上线版本.每一个版本用到的数据库也是不一样的.所以需要能灵活的切换数据库连接.当然这个用maven就解决了.Apache Commo ...

  3. 使用Apache Commons Configuration读取配置信息

    在项目中使用一些比较新的库总会给你带来很多快乐,在这篇文章中,我将会给你介绍一个在Java中读取配置文件的框架——Apache Commons Configuration framework. 你会了 ...

  4. apache commons io包基本功能

    1. http://jackyrong.iteye.com/blog/2153812 2. http://www.javacodegeeks.com/2014/10/apache-commons-io ...

  5. apache commons lang包中的StringUtils

    计算一个字符串某个字符的出现次数 a, 使用charAt方法截取之后,循环判断. b, 使用apache commons lang包中的StringUtils: int n = StringUtils ...

  6. apache commons Java包简介

    更多信息,请参考:http://commons.apache.org/ 一.Commons BeanUtils说明:针对Bean的一个工具集.由于Bean往往是有一堆get和set组成,所以BeanU ...

  7. Apache Commons configuration使用入门

    使用Commons  Configuration可以很好的管理我们的配置文件的读写, 官网:http://commons.apache.org/configuration 需要用到commons-la ...

  8. IO与文件读写---使用Apache commons IO包提高读写效率

    觉得很不错,就转载了, 作者: Paul Lin 首先贴一段Apache commons IO官网上的介绍,来对这个著名的开源包有一个基本的了解:Commons IO is a library of ...

  9. jar包读取配置文件

    读取jar包内配置文件: Properties config = new Properties(); InputStream in = this.getClass().getClassLoader() ...

  10. 使用Apache Commons IO组件读取大文件

    Apache Commons IO读取文件代码如下: Files.readLines(new File(path), Charsets.UTF_8); FileUtils.readLines(new ...

随机推荐

  1. 将网页html文件离线下载保存到本地的方法

    (1)复制想要离线的网页的网址: 范例:http://bbs.xyaz.cn/thread-52540-1-1.html (2)将网址放入迅雷中,让其将html文件下载下来. (3)下载结果

  2. SpringBoot配置多数据源Mysql+Sqlite

    ​ 配置了一下druid的多数据源配置,尝试了很多方法,Spring boot关于对Mysql和Sqlite多数据源的配置,记录下来: 涉及技术点: Springboot + Druid + Mysq ...

  3. 开灯问题—C语言

    开灯问题 有n盏灯,编号为1~n.第1个人把所有灯打开,第2个人按下所有编号为2的倍数开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关,以此类推.一共有k个人,问最后哪些灯是开着?输入n和 ...

  4. Python-记事本

    1.文本颜色 格式:\[显示方式;前景色;背景色m要打印的字符串\[0m 2.format 格式 print('{}的三次方为{:*^20}'.format(a,pow(a, 3))) print(& ...

  5. Locust性能测试-环境准备与基本使用 转自:悠悠

    前言 提到性能测试,大部分小伙伴想到的就是LR和jmeter这种工具,小编一直不太喜欢写这种工具类的东西,我的原则是能用代码解决的问题,尽量不去用工具. python里面也有一个性能测试框架Locus ...

  6. Windows 上的应用程序在运行期间可以给自己改名(可以做 OTA 自我更新)

    原文:Windows 上的应用程序在运行期间可以给自己改名(可以做 OTA 自我更新) 程序如何自己更新自己呢?你可能会想到启动一个新的程序或者脚本来更新自己.然而 Windows 操作系统允许一个应 ...

  7. MVC的Views中使用递归生成Html【转】

    在开发过程中往往会有一个需求,就是将一个树状的数据结构在视图中表示出来.例如最传统的多级分类,系统中有一系列根分类,每个分类中又带有一些子分类,而我们的目标便是在页面上生成一个由ul和li嵌套组成的H ...

  8. The underlying connection was closed: An unexpected error occurred on a rece

    服务器问题,在后台访问外网了,特别是https的网站,容易出这个问题. 修改服务器配置,或修改代码解决.

  9. SOFT-NMS (二) (non maximum suppression,非极大值抑制)

    import numpy as np boxes = np.array([[200, 200, 400, 400], [220, 220, 420, 420], [200, 240, 400, 440 ...

  10. 题解 POJ 2559-SP1805 【HISTOGRA - Largest Rectangle in a Histogram】

    题目链接: https://www.luogu.org/problemnew/show/SP1805 http://poj.org/problem?id=2559 思路: ## 单调栈 首先如果所有矩 ...