疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java之配置文件


 

一、Properties文件
        Java中配置文件最简单、依赖最少的莫过于Properties文件。通过java.util包的Properties类实现配置读取,配置文件以key=value形式存储配置,读取时key为String类型,返回的value也是String类型。下面举例说明如下使用Properties类读取配置文件。
1、配置文件
        #vi config.properties
        Hello=World
2、实例代码
        #vi Conf4Prop.java
        import java.io.IOException;    
        import java.util.Properties;
 
        public class Conf4Prop {
            private static Properties p = null;
            private static Conf4Prop conf4prop = null;
 
            public static Conf4Prop getInstance()
            {
                if (null == conf4prop)
                {
                    conf4prop = new Conf4Prop();
                }
                return conf4prop;
            }
 
            public boolean LoadConf(String strLogConfPath)
            {
                try {
                    if (null == p) {
                        p = new Properties();
                    }
                    p.load(Thread.currentThread().getContextClassLoader().getResourceAsStream(strLogConfPath));
                } catch (IOException e) {
                    e.printStackTrace();
                    return false;
                }
                return true;
            }
 
            public String GetConf(String strKey)
            {
                return p.getProperty(strKey);
            }
 
            public static void main(String[] args) {
                Conf4Prop.getInstance().LoadConf(args[0]);
                String key = "Hello";
                String value = Conf4Prop.getInstance().GetConf(key);
                System.out.println("Hello="+value);
            }
        }
3、输出结果
        #javac -d ./ Conf4Prop.java
        #java Conf4Prop config.properties
        Hello=World
二、XML文件
        如果配置非简单的key=value能描述,而需要复杂的层次结构才能描述的话,XML文件将是您的首先。
1、配置文件
        #vi config.xml
        <?xml version="1.0" encoding="utf-8" ?>
        <config>
            <service_name>http_server</service_name>
            <Address>
                <IP>192.168.1.1</IP>
                <Port>8080</Port>
            </Address>
        </conifig>
2、实例代码
        #vi Conf4Xml.java
        import org.apache.commons.configuration.ConfigurationException;
        import org.apache.commons.configuration.XMLConfiguration;
 
        public class XmlConfigDemo {
            public static void main(String[] args) {
                try {
                    XMLConfiguration config = new XMLConfiguration("config.xml");
                    System.out.println(config.getList("name"));
                    System.out.println(config.getInt("info.age"));
                } catch (ConfigurationException e) {
                    e.printStackTrace();
                }
            }
        }
 
三、混合文件
        Java中可以混合Properties和XML配置文件来满足更加复杂的应用配置需求。比如:假设有3个配置文件,分别是global.properties、local.properties、user.properties,其中,user优先于local,local优先于global,那么用以下这3个Properties逻辑配置文件和1个XML引用配置文件就可实现复合配置。
1、引用配置文件
        cofigs.xml内容如下:
        <?xml version="1.0" encoding="utf-8" ?>
        <configuration>
            <properties fileName="user.properties" />
            <properties fileName="local.properties" />
            <properties fileName="global.properties" />
        </configuration>
2、逻辑配置文件
        (1)global.properties内容如下:
        name=Default User
        age=0
        speed=10
        (2)local.properties内容如下:
        name=kiyho
        age=20
        (3)user.properties内容如下:
        age=100
3、实例代码
        import org.apache.commons.configuration.Configuration;
        import org.apache.commons.configuration.ConfigurationException;
        import org.apache.commons.configuration.ConfigurationFactory;
 
        public class ConfigsDemo {
            public static void main(String[] args) {
                ConfigurationFactory factory = new ConfigurationFactory();
                factory.setConfigurationFileName("configs.xml");
 
                try {
                    Configuration config = factory.getConfiguration();
                    System.out.println("name: " + config.getString("name"));
                    System.out.println("age: " + config.getInt("age"));
                    System.out.println("speed: " + config.getFloat("speed"));
                } catch (ConfigurationException e) {
                    e.printStackTrace();
                }
            }
        }