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