Java 加载配置文件的方式
一 使用原生方式读取配置文件1 文件系统加载
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相对路径
InputStream in = Main.class.getResourceAsStream("/test/resource/config.properties");
注意事项:如上以/开头的是指从根目录开始加载。
D 使用类加载器的方式
InputStream in = Main.class.getClassLoader().getResourceAsStream("test/resource/config.properties");
E 资源配置文件在classes下
InputStream in = 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); } 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 java.util.List;import org.apache.commons.configuration.Configuration;import org.apache.commons.configuration.ConfigurationException;import org.apache.commons.configuration.XMLConfiguration;public class XMLConfigurationDemo { public static void main(String[] args) throws ConfigurationException { 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文件代码:
<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
import org.apache.commons.configuration.Configuration;import org.apache.commons.configuration.ConfigurationException;import org.apache.commons.configuration.XMLConfiguration;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><criteria>Fuel tank is not empty </criteria></start-criteria><volume>4 Liters</volume><horsepower>42</horsepower></engine-config>
示例3:混合读取二种文件
import java.util.List;import org.apache.commons.configuration.CompositeConfiguration;import org.apache.commons.configuration.ConfigurationException;import org.apache.commons.configuration.PropertiesConfiguration;import org.apache.commons.configuration.XMLConfiguration;public class Test {public static void main(String[] args) throws ConfigurationException {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");int horsepower = config.getInt("horsepower");for (int i = 0; i < startCriteria.size(); i++) {System.out.println("Role: " + startCriteria.get(i));}System.out.println(horsepower);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 java.util.List;import org.apache.commons.configuration.Configuration;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();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: " + horsepower);System.out.println("Speed: " + config.getFloat("speed"));System.out.println("Names: " + config.getString("name"));}}
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
页:
[1]