Java 加载配置文件的方式

来源:互联网 发布:如何使用淘宝积分 编辑:程序博客网 时间:2024/05/29 19:12
一 使用原生方式读取配置文件

1 文件系统加载

Java代码  收藏代码
  1. InputStream in = new FileInputStream("config.properties");        
  2. Properties p = new Properties();  
  3. p.load(in);  


2 类加载方式

A 与类同级目录
Java代码  收藏代码
  1. InputStream in = Main.class.getResourceAsStream("config.properties");  

B 在类的下一级目录
Java代码  收藏代码
  1. InputStream in =   
  2. Main.class.getResourceAsStream("resource/config.properties");  

C 指定加载资源配置文件的classes相对路径
Java代码  收藏代码
  1. InputStream in =   
  2. Main.class.getResourceAsStream("/test/resource/config.properties");  

注意事项:如上以/开头的是指从根目录开始加载。

D 使用类加载器的方式
Java代码  收藏代码
  1. InputStream in = Main.class.getClassLoader().  
  2. getResourceAsStream("test/resource/config.properties");  

E 资源配置文件在classes下
Java代码  收藏代码
  1. InputStream in =   
  2. Main.class.getClassLoader().getResourceAsStream("config.properties");  


二 使用apache提供的功能组件
参照网上相关资料
1 读取properties文件的方式
示例代码

Java代码  收藏代码
  1. import java.util.List;  
  2. import org.apache.commons.configuration.Configuration;  
  3. import org.apache.commons.configuration.ConfigurationException;  
  4. import org.apache.commons.configuration.PropertiesConfiguration;  
  5.   
  6. public class PropertiesConfigurationDemo {  
  7.   
  8.     public static void main(String[] args) throws ConfigurationException {  
  9.   
  10.         Configuration config = new PropertiesConfiguration(PropertiesConfigurationDemo.class.getResource("system-config.properties"));  
  11.         String ip = config.getString("ip");         
  12.         String[] colors = config.getStringArray("colors.pie");   
  13.         for (int i = 0; i < colors.length; i++) {  
  14.             System.out.println(colors[i]);  
  15.         }  
  16.                
  17.         List<?> colorList = config.getList("colors.pie");  
  18.         for (int i = 0; i < colorList.size(); i++) {  
  19.             System.out.println(colorList.get(i));  
  20.         }  
  21.      }  
  22. }  


配置文件代码:

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

2 读取XML文件的方式

Java代码  收藏代码
  1. import java.util.List;  
  2. import org.apache.commons.configuration.Configuration;  
  3. import org.apache.commons.configuration.ConfigurationException;  
  4. import org.apache.commons.configuration.XMLConfiguration;  
  5.   
  6. public class XMLConfigurationDemo {  
  7.   
  8.     public static void main(String[] args) throws ConfigurationException {  
  9.   
  10.         Configuration config = new XMLConfiguration(XMLConfigurationDemo.class  
  11.                 .getResource("system-config.xml"));  
  12.         String ip = config.getString("ip");  
  13.         String account = config.getString("account");  
  14.         String password = config.getString("password");  
  15.         List<?> roles = config.getList("roles.role");  
  16.         System.out.println("IP: " + ip);  
  17.         System.out.println("Account: " + account);  
  18.         System.out.println("Password: " + password);          
  19.         for (int i = 0; i < roles.size(); i++) {  
  20.             System.out.println("Role: " + roles.get(i));  
  21.         }         
  22.     }  
  23. }  


Xml文件代码:
Xml代码  收藏代码
  1. <config>  
  2.     <ip>10.10.1.1</ip>  
  3.     <account>jini</account>  
  4.     <password>jakarta99</password>  
  5.     <roles>  
  6.         <role>admin</role>  
  7.         <role>manager</role>  
  8.         <role>user</role>  
  9.     </roles>  
  10. </config>  


示例2

Java代码  收藏代码
  1. import org.apache.commons.configuration.Configuration;  
  2. import org.apache.commons.configuration.ConfigurationException;  
  3. import org.apache.commons.configuration.XMLConfiguration;  
  4. public class XmlConfigurationExample {  
  5.     public static void main(String[] args) throws Exception,  
  6.             ConfigurationException {  
  7.         String resource = "main/global.xml";  
  8.         Configuration config = new XMLConfiguration(resource);  
  9.         // 只有new一个XMLConfiguration的实例就可以了.  
  10.         List<?> startCriteria = config.getList("start-criteria.criteria");          
  11.         for (int i = 0; i < startCriteria.size(); i++) {  
  12.             System.out.println("Role: " + startCriteria.get(i));  
  13.         }  
  14.         int horsepower = config.getInt("horsepower");  
  15.         System.out.println(horsepower);  
  16.     }  
  17. }  

global.xml文件代码
Xml代码  收藏代码
  1. <?xml version="1.0" encoding="ISO-8859-1" ?>  
  2. <engine-config>  
  3.     <start-criteria>  
  4.         <criteria>  
  5.             Temperature Above -10 Celsius   
  6.         </criteria>  
  7.         <criteria>  
  8.             Fuel tank is not empty   
  9.        </criteria>  
  10.     </start-criteria>  
  11.     <volume>4 Liters</volume>  
  12.     <horsepower>42</horsepower>  
  13. </engine-config>  


示例3:混合读取二种文件

Java代码  收藏代码
  1. import java.util.List;  
  2. import org.apache.commons.configuration.CompositeConfiguration;  
  3. import org.apache.commons.configuration.ConfigurationException;  
  4. import org.apache.commons.configuration.PropertiesConfiguration;  
  5. import org.apache.commons.configuration.XMLConfiguration;  
  6.   
  7. public class Test {  
  8.       
  9.     public static void main(String[] args) throws ConfigurationException {  
  10.         CompositeConfiguration config = new CompositeConfiguration();  
  11.         config.addConfiguration(new PropertiesConfiguration(  
  12.         "main/global.properties"));  
  13.         config.addConfiguration(new XMLConfiguration("main/global.xml"));  
  14.           
  15.         List<?> startCriteria = config.getList("start-criteria.criteria");  
  16.         int horsepower = config.getInt("horsepower");  
  17.         for (int i = 0; i < startCriteria.size(); i++) {  
  18.             System.out.println("Role: " + startCriteria.get(i));  
  19.         }  
  20.         System.out.println(horsepower);  
  21.         System.out.println("Speed: " + config.getFloat("speed"));  
  22.         System.out.println("Names: " + config.getString("name"));  
  23.     }  
  24. }  

Xml如上所示,global.properties文件如下:
speed=50 
name=Default User

示例4
Java代码  收藏代码
  1. import java.net.URL;  
  2. import java.util.List;  
  3. import org.apache.commons.configuration.Configuration;  
  4. import org.apache.commons.configuration.ConfigurationFactory;  
  5. public class PropertiesXmlConfigurationExample {  
  6.       
  7.     public static void main(String[] args) throws Exception {             
  8.         ConfigurationFactory factory = new ConfigurationFactory();  
  9.         URL configURL = PropertiesXmlConfigurationExample.class.getResource("additional-xml-configuration.xml");  
  10.         factory.setConfigurationURL(configURL);  
  11.         Configuration config = factory.getConfiguration();  
  12.         List<?> startCriteria = config.getList("start-criteria.criteria");  
  13.         for (int i = 0; i < startCriteria.size(); i++) {  
  14.             System.out.println("Role: " + startCriteria.get(i));  
  15.         }  
  16.         int horsepower = config.getInt("horsepower");  
  17.         System.out.println("Horsepower: " + horsepower);  
  18.           
  19.         System.out.println("Speed: " + config.getFloat("speed"));  
  20.         System.out.println("Names: " + config.getString("name"));  
  21.           
  22.     }  
  23. }  


additional-xml-configuration.xml文件内容:
Xml代码  收藏代码
  1. <?xml version="1.0" encoding="ISO-8859-1" ?>   
  2. <configuration>   
  3. <properties fileName="global.properties"/>   
  4. <xml fileName="global.xml"/>  
  5. </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
0 0
原创粉丝点击