Commons Configutation
commons configuration可以很方便的訪問配置文件和xml文件中的的內容。Commons Configuration 是為了提供對屬性文件、XML文件、JNDI資源、來自JDBC Datasource數據的訪問。
官方文檔:http://commons.apache.org/proper/commons-configuration/
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)新建一個icp.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 = "icp.properties"; public static PropertiesConfiguration cfg = null; static { try { cfg = new PropertiesConfiguration(fileName); } catch (ConfigurationException e) { e.printStackTrace(); } // 當文件的內容發生改變時,配置對象也會刷新 cfg.setReloadingStrategy(new FileChangedReloadingStrategy()); } // 讀String public static String getStringValue(String key) { return cfg.getString(key); } // 讀int public static int getIntValue(String key) { return cfg.getInt(key); } // 讀boolean 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); } }
(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); } }
(4)測試結果
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); }
(4)測試結果
由於項目中,經常有多個配置文件,最后提供一個工具類:
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("icp.properties", "name"); System.out.println(name); String url = PropertiesUtil.getStringValue("icp.xml", "database.url"); System.out.println(url); }