一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

java读取配置文件一些方法总结

时间:2013-11-27 编辑:简简单单 来源:一聚教程网

Jakarta Commons的configuration包读取配置文件

配置文件一般常见的有两种:键值对格式,或XML配置文件,读取这类配置文件可以用Commons Configuration包。

键值对格式也就是常见的.properties文件。通过PropertiesConfiguration读取,如下:

 代码如下 复制代码

package com.guoweiwei.test.configuration;
import java.util.List;
import org.apache.commons.configuration.Configuration;

import org.apache.commons.configuration.ConfigurationException;

import org.apache.commons.configuration.PropertiesConfiguration;

public class PropertiesReadExample {

    /**

     * @param args

     * @throws ConfigurationException

     */

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

       Configuration config = new PropertiesConfiguration(“com/guoweiwei/test/configuration/test.properties”);

       float speed = config.getFloat(“speed”);

       List names = config.getList(“names”);

       boolean correct = config.getBoolean(“correct”);

       System.out.println(“speed:” + speed);

       System.out.println(“names:” + names.size());

       System.out.println(“correct:” + correct);

    }

}

当然对XML文件的读取和解析也是如此简单:

 代码如下 复制代码

package com.guoweiwei.test.configuration;import java.util.List;

import org.apache.commons.configuration.Configuration;

import org.apache.commons.configuration.ConfigurationException;

import org.apache.commons.configuration.XMLConfiguration;

public class XMLReadExample {

    private static final String RESOURCE_FILE = “com/guoweiwei/test/configuration/test.xml”;

    /**

     * @param args

     * @throws ConfigurationException

     */

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

       Configuration config = new XMLConfiguration(RESOURCE_FILE);

       List startCriteria = config.getList(“start-criteria.criteria”);

       String firstCriteria = config.getString(“start-criteria.criteria(0)”);

       String firstCriteriaType = config.getString(“start-criteria.criteria(0)[@type]“);

       int horsepower = config.getInt(“horsepower”);

       System.out.println(“startCriteria:” + startCriteria.size());

       System.out.println(“firstCriteria:” + firstCriteria);

       System.out.println(“firstCriteriaType:” + firstCriteriaType);

       System.out.println(“horsepower:” + horsepower);

    }

}

从上面的代码可以看出,XMLConfiguration的getXXX()方法还支持XPath解析XML文件。

此外,可以综合使用XML和属性文件读取配置文件,比如一种常见的场景:

应用程序的配置有多个不同的地方。首先是一个全局配置;然后某个地方可能需要局部配置,当两者重复时以局部配置为准,然后还有一个用户自定义的配置文件,用户自定义的配置文件优先级又高于局部配置和全局配置。这个时候就可以考虑用一个ConfigurationFactory来管理了,将三个不同的配置文件分别定义为global.properties、local.properties、user.properties,然后通过一个configuration.xml的文件来管理三者之间的优先级关系,如下所示:

属性配置文件之一global.properties

threads.max=50threas.min=2

timout=15.52

interactive=true

color=red

speed=50

name=Default User
 

属性配置文件之二local.properties

threads.max=30speed=55

属性配置文件之三user.properties

threads.min=1color=black

speed=5000

name=Sean
 

管理这三个属性配置文件的配置文件configuration.xml

 代码如下 复制代码

   

   

   


 

然后,应用程序中可以这样使用:

 代码如下 复制代码

package com.guoweiwei.test.configuration;import java.net.MalformedURLException;

import java.net.URL;

import org.apache.commons.configuration.Configuration;

import org.apache.commons.configuration.ConfigurationException;

import org.apache.commons.configuration.ConfigurationFactory;

public class ComplexConfigExample {

    private static final String RESOURCE_FILE = “com/guoweiwei/test/configuration/complex/configuration.xml”;

    /**

     * @param args

     * @throws ConfigurationException

     * @throws MalformedURLException

     */

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

       ComplexConfigExample c = new ComplexConfigExample();

       c.ReadComplexConfiguration();

    }

    private void ReadComplexConfiguration() throws ConfigurationException{

       ConfigurationFactory factory = new ConfigurationFactory();

       //URL url = this.getClass().getResource(RESOURCE_FILE);

       URL url = this.getClass().getResource(“complex/configuration.xml”);

       factory.setConfigurationURL(url);

       Configuration config = factory.getConfiguration();

       System.out.println(“Timeout:”+config.getFloat(“timout”));

       System.out.println(“Max Thread:”+config.getInt(“threads.max”));

       System.out.println(“Name:”+config.getString(“name”));

       System.out.println(“Speed:”+config.getInt(“speed”));

    }

}

最后的输出结果如下:

Timeout:15.52 【来自于global.properties】Max Thread:30 【来自于local.properties】

Name:Sean 【来自于user.properties】

Speed:5000 【来自于user.properties】
 

spring读取配置文件


一.读取xml配置文件

    (一)新建一个java bean(HelloBean.java)
    java 代码

  

 代码如下 复制代码
      package chb.demo.vo;  
         
        public class HelloBean {  
         private String helloWorld;  
         
         public String getHelloWorld() {  
          return helloWorld;  
         }  
         
         public void setHelloWorld(String helloWorld) {  
          this.helloWorld = helloWorld;  
         }  
        }  
         

    (二)构造一个配置文件(beanConfig.xml)
    xml 代码

    

 代码如下 复制代码

    xml version="1.0" encoding="UTF-8"?> 
       
         
          
           
           Hello!chb!value> 
          property> 
         bean> 
        beans> 

   

(三)读取xml文件
    1.利用ClassPathXmlApplicationContext
    java 代码

 

 代码如下 复制代码
       ApplicationContext context = new ClassPathXmlApplicationContext("beanConfig.xml");  
        HelloBean helloBean = (HelloBean)context.getBean("helloBean");  
        System.out.println(helloBean.getHelloWorld()); 

    2.利用FileSystemResource读取
    java 代码

    

 代码如下 复制代码
    Resource rs = new FileSystemResource("D:/software/tomcat/webapps/springWebDemo/WEB-INF/classes/beanConfig.xml");  
          BeanFactory factory = new XmlBeanFactory(rs);  
          HelloBean helloBean = (HelloBean)factory.getBean("helloBean");  
          System.out.println(helloBean.getHelloWorld());  

     值得注意的是:利用FileSystemResource,则配置文件必须放在project直接目录下,或者写明绝对路径,否则就会抛出找不到文件的异常

二.读取properties配置文件

    这里介绍两种技术:利用spring读取properties 文件和利用java.util.Properties读取
    (一)利用spring读取properties 文件
    我们还利用上面的HelloBean.java文件,构造如下beanConfig.properties文件:
    properties 代码

 代码如下 复制代码

        helloBean.class=chb.demo.vo.HelloBean  
        helloBean.helloWorld=Hello!chb! 

    属性文件中的"helloBean"名称即是Bean的别名设定,.class用于指定类来源。
    然后利用org.springframework.beans.factory.support.PropertiesBeanDefinitionReader来读取属性文件
    java 代码

      

 代码如下 复制代码
  BeanDefinitionRegistry reg = new DefaultListableBeanFactory();  
         PropertiesBeanDefinitionReader reader = new PropertiesBeanDefinitionReader(reg);  
         reader.loadBeanDefinitions(new ClassPathResource("beanConfig.properties"));  
         BeanFactory factory = (BeanFactory)reg;  
         HelloBean helloBean = (HelloBean)factory.getBean("helloBean");  
         System.out.println(helloBean.getHelloWorld());  

     
    (二)利用java.util.Properties读取属性文件
    比如,我们构造一个ipConfig.properties来保存服务器ip地址和端口,如:
    properties 代码

        ip=192.168.0.1  
        port=8080 

    则,我们可以用如下程序来获得服务器配置信息:
    java 代码

     

 代码如下 复制代码
   InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("ipConfig.properties");  
          Properties p = new Properties();  
          try {  
           p.load(inputStream);  
          } catch (IOException e1) {  
           e1.printStackTrace();  
          }  
        System.out.println("ip:"+p.getProperty("ip")+",port:"+p.getProperty("port")); 

本文只介绍了一些简单操作,不当之处希望大家多多指教

热门栏目