`

加载配置文件的方式(java[Properties,InputStream]与apache-commons-configuration组件)

阅读更多
一 使用原生方式读取配置文件

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提供的功能组件
它使用了大量的apache-commons其它组件,很麻烦
参照网上相关资料
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 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 对象

参考资料:
Jakarta-Common-Configuration使用笔记
http://blog.csdn.net/kunshan_shenbin/archive/2008/01/24/2062542.as
common-configuration读取xml,properties文件
http://javamy.iteye.com/blog/252619
使用apache common configuration读取配置文件或修改配置文件
http://www.suneca.com/article.asp?id=9

附件说明:

Project-Java-ClassLoad.rar是工程项目文件
apache-commons-lib.jar.rar是apache-commons相关的依赖包
加载配置文件的方式.rar是当前文章的
apache-commons-lib.jpg是它所需要的JAR文件
  • 大小: 27.7 KB
分享到:
评论
1 楼 yugiohboy 2012-02-09  
好全面,正好需要这方面的知识,学习了。

相关推荐

    Java 加载配置文件的方式

    第三方库如Apache Commons Configuration提供了更灵活的配置文件处理方式,支持多种格式,包括XML、INI、JSON等,并且支持动态更新配置。 7. **使用Java 11以上的Path API** 自Java 11开始,可以直接使用`Files....

    java读取properties配置文件

    在Java编程中,`properties`文件是一种常用的存储配置信息的方式,它以键值对的形式组织数据,便于程序在运行时动态获取和修改配置。本文将详细介绍如何在Java中读取`properties`配置文件。 首先,我们需要了解`...

    java读取配置文件

    Apache Commons Configuration库提供了一种更强大且灵活的方式来处理配置文件,支持.properties、XML、ini等多种格式: ```java Configuration config = new PropertiesConfiguration("config.properties"); ...

    java实现properties文件读取

    - 对于生产环境,推荐使用配置管理工具,如Spring的`@Value`注解或Apache Commons Configuration库,以提供更高级的功能和灵活性。 在提供的`ConfigInfo.java`文件中,可能包含了实现Properties文件读取的具体逻辑...

    java读取配置文件源代码

    在Java编程中,读取配置文件是...此外,现代Java项目倾向于使用更高级的配置管理框架,如Apache Commons Configuration或Spring Boot的`@ConfigurationProperties`注解,这些工具提供了更强大和灵活的配置处理能力。

    java 读取配置文件

    2. 获取配置项:加载文件后,我们可以使用`getProperty()`方法获取特定的配置项。 ```java String url = prop.getProperty("database.url"); String username = prop.getProperty("database.username"); String ...

    java读取properties文件

    2. **加载文件**:使用`InputStream`从指定路径加载`.properties`文件。这里我们通常使用`ClassLoader`来获取资源文件,这样可以处理类路径中的文件。 ```java InputStream input = null; try { input = getClass...

    解析配置文件 工程源码

    1. **使用Apache Commons Configuration**:引入相关依赖后,我们可以创建`HierarchicalConfiguration`对象来解析XML配置文件,然后通过路径表达式获取值。 2. **动态配置**:Solr实现了监控配置文件变动并自动刷新...

    解析XML和Propertites配置文件

    2. **commons-configuration-1.4.jar**:提供了一种灵活的方式来读取和管理配置信息,包括XML和Properties格式,简化了配置文件的处理。 3. **commons-lang-2.3.jar**:提供了许多增强的字符串和对象操作,可能用于...

    配置文件操作

    首先,创建`Properties`对象,然后通过`InputStream`加载文件。`ClassLoader.getResourceAsStream()`或`new FileInputStream()`可以用来获取文件输入流。 - 调用`Properties.load(InputStream)`方法加载配置文件...

    解决Properties写中文乱码

    5. **使用第三方库**:还有一些第三方库如Apache Commons Configuration,它们提供了更灵活的配置文件处理方式,支持多种编码。 在提供的"srcfile"压缩包中,可能包含了实现以上解决方案的源代码。你可以查看这些源...

    关于读取Src下配置文件的那个传说

    4. **跨平台解决方案**:一些库如Java的`org.apache.commons.io.IOUtils`或Python的`pathlib`提供跨平台的文件操作。它们可以帮助开发者在不同操作系统上统一处理文件路径。 博客可能还涵盖了以下主题: - **错误...

    动态加载属性文件

    在开发工具方面,有一些库如Apache Commons Configuration提供了更高级的功能,如自动检测文件变化、支持多种配置格式等,可以简化这个过程。 总的来说,动态加载属性文件是Java应用中灵活性和可维护性的重要组成...

    java读取属性文件

    此外,还有一些第三方工具和库可以帮助简化属性文件的读写操作,比如Apache Commons Configuration,它提供了更灵活的配置选项,如XML、JSON格式的配置文件支持,以及更高级的特性如类型转换和表达式语言支持。...

    ServletPathDemo

    - 使用配置管理框架(如Apache Commons Configuration、Spring Config Server等)可以提高配置文件的管理效率和安全性。 综上所述,ServletPathDemo项目旨在教育开发者如何在Servlet环境中灵活地处理配置文件,这...

    java ReadProperties

    此外,对于更复杂的配置需求,开发者可能会选择使用第三方库,如Apache Commons Configuration或Spring Framework的`@Value`注解,它们提供了更灵活的配置管理和类型转换功能。 标签中提到的“源码”可能意味着博客...

    java读取和保存property文件(可含中文)

    此外,还可以使用第三方库如Apache Commons Configuration或Java 8引入的`java.util.prefs.Preferences` API来提供更高级的配置管理功能,如支持XML配置、默认值、监听属性变化等。 总结,Java中的`java.util....

    demo-properties-java:不带弹簧的Modelo decriaçãode parame(java)

    如果需要更高级的特性,如属性占位符替换、文件热加载等,可能需要自定义实现或者使用轻量级的配置库,如Apache Commons Configuration。 6. **最佳实践** - 将敏感信息(如密码)加密存储,避免明文暴露。 - 在...

Global site tag (gtag.js) - Google Analytics