天天看點

Java 加載配置檔案的方式

一 使用原生方式讀取配置檔案

1 檔案系統加載

Java代碼  

InputStream in = new FileInputStream("config.properties");        

Properties p = new Properties();  

p.load(in);  

2 類加載方式

A 與類同級目錄

InputStream in = Main.class.getResourceAsStream("config.properties");  

B 在類的下一級目錄

InputStream in =   

Main.class.getResourceAsStream("resource/config.properties");  

C 指定加載資源配置檔案的classes相對路徑

Main.class.getResourceAsStream("/test/resource/config.properties");  

注意事項:如上以/開頭的是指從根目錄開始加載。

D 使用類加載器的方式

InputStream in = Main.class.getClassLoader().  

getResourceAsStream("test/resource/config.properties");  

E 資源配置檔案在classes下

Main.class.getClassLoader().getResourceAsStream("config.properties");  

二 使用apache提供的功能元件

參照網上相關資料

1 讀取properties檔案的方式

示例代碼

import java.util.List;  

import org.apache.commons.configuration.Configuration;  

import org.apache.commons.configuration.ConfigurationException;  

import org.apache.commons.configuration.PropertiesConfiguration;  

public class PropertiesConfigurationDemo {  

    public static void main(String[] args) throws ConfigurationException {  

        Configuration config = new PropertiesConfiguration(PropertiesConfigurationDemo.class.getResource("system-config.properties"));  

        String ip = config.getString("ip");         

        String[] colors = config.getStringArray("colors.pie");   

        for (int i = 0; i < colors.length; i++) {  

            System.out.println(colors[i]);  

        }  

        List<?> colorList = config.getList("colors.pie");  

        for (int i = 0; i < colorList.size(); i++) {  

            System.out.println(colorList.get(i));  

     }  

}  

配置檔案代碼:

ip=10.10.1.1

colors.pie = #FF0000, #00FF00, #0000FF

2 讀取XML檔案的方式

import org.apache.commons.configuration.XMLConfiguration;  

public class XMLConfigurationDemo {  

        Configuration config = new XMLConfiguration(XMLConfigurationDemo.class  

                .getResource("system-config.xml"));  

        String ip = config.getString("ip");  

        String account = config.getString("account");  

        String password = config.getString("password");  

        List<?> roles = config.getList("roles.role");  

        System.out.println("IP: " + ip);  

        System.out.println("Account: " + account);  

        System.out.println("Password: " + password);          

        for (int i = 0; i < roles.size(); i++) {  

            System.out.println("Role: " + roles.get(i));  

        }         

    }  

Xml檔案代碼:

Xml代碼  

<config>  

    <ip>10.10.1.1</ip>  

    <account>jini</account>  

    <password>jakarta99</password>  

    <roles>  

        <role>admin</role>  

        <role>manager</role>  

        <role>user</role>  

    </roles>  

</config>  

示例2

public class XmlConfigurationExample {  

    public static void main(String[] args) throws Exception,  

            ConfigurationException {  

        String resource = "main/global.xml";  

        Configuration config = new XMLConfiguration(resource);  

        // 隻有new一個XMLConfiguration的執行個體就可以了.  

        List<?> startCriteria = config.getList("start-criteria.criteria");          

        for (int i = 0; i < startCriteria.size(); i++) {  

            System.out.println("Role: " + startCriteria.get(i));  

        int horsepower = config.getInt("horsepower");  

        System.out.println(horsepower);  

global.xml檔案代碼

<?xml version="1.0" encoding="ISO-8859-1" ?>  

<engine-config>  

    <start-criteria>  

        <criteria>  

            Temperature Above -10 Celsius   

        </criteria>  

            Fuel tank is not empty   

       </criteria>  

    </start-criteria>  

    <volume>4 Liters</volume>  

    <horsepower>42</horsepower>  

</engine-config>  

示例3:混合讀取二種檔案

import org.apache.commons.configuration.CompositeConfiguration;  

public class Test {  

        CompositeConfiguration config = new CompositeConfiguration();  

        config.addConfiguration(new PropertiesConfiguration(  

        "main/global.properties"));  

        config.addConfiguration(new XMLConfiguration("main/global.xml"));  

        List<?> startCriteria = config.getList("start-criteria.criteria");  

        System.out.println("Speed: " + config.getFloat("speed"));  

        System.out.println("Names: " + config.getString("name"));  

Xml如上所示,global.properties檔案如下:

speed=50 

name=Default User

示例4

import java.net.URL;  

import org.apache.commons.configuration.ConfigurationFactory;  

public class PropertiesXmlConfigurationExample {  

    public static void main(String[] args) throws Exception {             

        ConfigurationFactory factory = new ConfigurationFactory();  

        URL configURL = PropertiesXmlConfigurationExample.class.getResource("additional-xml-configuration.xml");  

        factory.setConfigurationURL(configURL);  

        Configuration config = factory.getConfiguration();  

        System.out.println("Horsepower: " + horsepower);  

additional-xml-configuration.xml檔案内容:

<?xml version="1.0" encoding="ISO-8859-1" ?>   

<configuration>   

<properties fileName="global.properties"/>   

<xml fileName="global.xml"/>  

</configuration>  

相關API說明:

# PropertiesConfiguration 從一個 property 檔案中加載配置 .

# XMLConfiguration 從 XML 檔案中加載配置資訊 .

# XMLPropertyListConfiguration 也可以讀取 XML 被 Mac OSX 使用變量 .

# JNDIConfiguration 利用 jndi 樹的一個鍵值,可以傳回一個值,這個值來作為配置資訊

# BaseConfiguration 通路記憶體中的一個配置對象 .

# HierarchicalConfiguration 一個在記憶體中的配置對象,這個對象可以處理複雜的資料結構 .

# SystemConfiguration 一個利用系統屬性的配置資訊

# ConfigurationConverter 把 java.util.Properties 或者 org.apache.collections.commons.ExtendedProperties 轉化為一個 Configuration 對象

參考資料:

common-configuration讀取xml,properties檔案

http://javamy.iteye.com/blog/252619

使用apache common configuration讀取配置檔案或修改配置檔案

http://www.suneca.com/article.asp?id=9若轉載請注明出處!若有疑問,請回複交流!