`

Java 加载配置文件的方式

    博客分类:
  • 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[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 对象

参考资料:
common-configuration读取xml,properties文件
http://javamy.iteye.com/blog/252619
使用apache common configuration读取配置文件或修改配置文件
http://www.suneca.com/article.asp?id=9

分享到:
评论

相关推荐

    Java加载配置文件工具类

    这个"Java加载配置文件工具类"很可能是为了解决这个问题而创建的一个实用工具,帮助开发者更方便、高效地处理配置文件。配置文件通常以.properties或.xml格式存在,用于存储应用程序的参数、配置项等。 配置文件的...

    java 获取 配置文件 属性 单例模式 高效加载

    通过单例模式实例化获取propertyUtil 工具包实例,高效加载配置文件,java语言编写。通过单例模式实例化获取propertyUtil 工具包实例,高效加载配置文件,java语言编写。通过单例模式实例化获取propertyUtil 工具包...

    java读取配置文件

    例如,`java.io.FileInputStream`可以用来打开文件,然后`java.util.Properties`类可以加载并解析配置文件。以下是一个简单的示例: ```java Properties props = new Properties(); FileInputStream fis = new ...

    Spring动态加载配置文件

    在Spring框架中,动态加载配置文件是一项重要的功能,它使得开发者在开发过程中无需重启应用就能实时更新配置,极大地提高了开发效率。热部署方案是这一功能的具体应用,它允许我们在不中断服务的情况下,对应用程序...

    Spring中使用classpath加载配置文件浅析

    首先,我们来看一下Spring加载配置文件的基本方式。在Spring中,可以通过ApplicationContext接口的实现类,比如ClassPathXmlApplicationContext,来加载位于classpath中的配置文件。例如,创建一个...

    Java 配置加载机制详解及实例

    本文将深入探讨Java配置加载机制,包括如何将配置文件映射为Java对象以及如何实现多种加载方式,以确保代码的可扩展性和可管理性。 配置加载器(IConfigLoader)是核心接口,它定义了一个加载配置的方法,返回类型...

    java读取配置文件源代码

    在这个示例中,我们首先创建一个`Properties`对象,然后通过`getResourceAsStream()`或`FileInputStream`加载配置文件。`getProperty()`方法用于获取配置文件中的特定属性。请注意,`getResourceAsStream()`通常用于...

    java中配置文件数据库连接写法

    首先,我们需要加载配置文件,然后获取其中的属性: ```java import java.io.FileInputStream; import java.io.IOException; import java.util.Properties; public class DBConfig { public static void main...

    JAVA配置文件编写说明文档

    6. **加载策略**:了解不同框架如何加载配置文件,比如Spring Boot会自动加载`src/main/resources`目录下的配置文件,而其他框架可能需要手动指定。 7. **动态配置**:在某些情况下,如云环境,可能需要支持动态...

    java 读取配置文件

    1. 加载配置文件:首先,我们需要创建一个`Properties`对象,然后加载配置文件。这可以通过`InputStream`完成,通常是从类路径或者文件系统中获取。 ```java Properties prop = new Properties(); InputStream ...

    配置文件热加载

    应用程序在启动的时候,可能会读取应用所需要的配置文件,如果说配置文件的内容不是一成不变的,在需要...假如,这个配置文件是我们的应用完全可控的,我们可以在不重启服务器的情况下,把新的配置文件数据加载起来。

    java中的@Value获取不到配置文件的值,也加载不到默认值

    从上方的配置文件我们也能看出所写的注解和方式是完全没有问题的! 查看源码后的具体流程 实际上就是对类上的value后面的属性值进行解析,然后拿到解析的数据和配置文件中的数据进行对比。如果对比成功,那么则通过...

    java加载属性配置文件(properties文件)——从入门到进阶

    java加载属性配置文件[properties文件]什么是properties文件为什么要使用properties文件使用java加载properties文件的两种方式使用类的加载器获得输入流加载文件getResourceAsStream()介绍使用文件输入流加载文件...

    java类读取配置文件信息

    该方法可以获取类加载器中所加载的资源,例如配置文件。在Java类中,我们可以使用该方法来读取配置文件信息。 例如,在给定的代码中,我们可以看到使用`this.getClass().getClassLoader().getResourceAsStream`方法...

    静态加载properties配置文件,根据key获取值的方法

    properties文件获取工具类:静态加载properties配置文件,有根据key获取值的方法

    java 静态代码块通过类加载器获取资源文件例子

    总之,通过Java的静态代码块和类加载器,我们可以有效地管理和加载资源文件,特别是属性配置文件,确保在程序启动时即完成初始化工作,提升应用性能。这种技术在大型复杂系统中尤其常见,因为它能够保证配置的正确性...

    Java进程配置文件Reload

    在Java编程中,进程配置文件的重新加载是一个关键操作,特别是在动态环境或持续集成的场景下,我们需要在不重启服务的情况下更新配置并让程序立即生效。`Java进程配置文件Reload`涉及的主要知识点包括: 1. **Java...

Global site tag (gtag.js) - Google Analytics