Java程序中,经常需要从配置文件中加载并读取设置,以支持不同的配置环境和参数。最常用的配置文件格式是XML和properties。两种方法都非常基础,适合于简单的配置文件读取需求。对于更复杂的需求,可能需要更高级的解析技术或第三方库。

一、xml配置文件

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

1、Apache Commons Configuration读取xml配置文件

1)使用Maven引入Commons Configuration,pom.xml配置文件如下,

<dependencies>
    <dependency>
        <groupId>commons-configuration</groupId>
        <artifactId>commons-configuration</artifactId>
        <version>1.8</version>
    </dependency>
    <dependency>
        <groupId>commons-beanutils</groupId>
        <artifactId>commons-beanutils</artifactId>
        <version>1.8.0</version>
    </dependency>
    <dependency>
        <groupId>commons-jxpath</groupId>
        <artifactId>commons-jxpath</artifactId>
        <version>1.3</version>
    </dependency>
</dependencies>

2)读取xml配置文件代码

XMLConfiguration config =new XMLConfiguration("const.xml");
//127.0.0.1
config.getString("database.url"); 
//1521
config.getString("database.port");

3)通过XPath表达式读取xml配置文件代码

XMLConfiguration config =new XMLConfiguration("const.xml");
config.setExpressionEngine(new XPathExpressionEngine());
//127.0.0.1
config.getString("databases/database[name = 'dev']/url");       
//192.23.44.100
config.getString("databases/database[name = 'production']/url");

文档:http://commons.apache.org/configuration/

2、JDOM读取xml配置文件

文档:http://www.jdom.org/downloads/docs.html

SAXBuilder parser = new SAXBuilder();
Document docConfig = parser.build("config.xml");
Element elConfig = docConfig.getRootElement();
String host = elConfig.getChildText("url");

二、properties配置文件

dbpassword=password
database=localhost
dbuser=levi

1)读取properties配置文件代码如下,

Properties prop = new Properties();
InputStream input = null;

try {

	input = new FileInputStream("config.properties");

	//加载properties文件
	prop.load(input);

	//get the property value and print it out
	System.out.println(prop.getProperty("database"));
	System.out.println(prop.getProperty("dbuser"));
	System.out.println(prop.getProperty("dbpassword"));

} catch (IOException ex) {
	ex.printStackTrace();
} finally {
	if (input != null) {
		try {
			input.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

2)从项目的classpath中读取properties配置文件

Properties prop = new Properties();
InputStream input = null;
try {
    String filename = "config.properties";
    input = test.class.getClassLoader().getResourceAsStream(filename);
    if (input == null) {
        System.out.println("Sorry, unable to find " + filename);
        return;
    }
    //从class文件路径加载properties文件
    prop.load(input);
    //获取属性值并打印出来
    System.out.println(prop.getProperty("database"));
    System.out.println(prop.getProperty("dbuser"));
    System.out.println(prop.getProperty("dbpassword"));
} catch (IOException ex) {
    ex.printStackTrace();
} finally {
    if (input != null) {
        try {
            input.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

推荐文档