zoukankan      html  css  js  c++  java
  • Java&Xml教程(十)XML作为属性文件使用

    我们一般会将Java应用的配置參数保存在属性文件里。Java应用的属性文件能够是一个正常的基于key-value对,以properties为扩展名的文件。也能够是XML文件.
    在本案例中。將会向大家介绍怎样通过Java程序输出这两种格式的属性文件。并介绍怎样从classpath中载入和使用这两种属性文件。
    以下是案例程序代码:
    PropertyFilesUtil.java

    package com.journaldev.util;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Properties;
    import java.util.Set;
    
    public class PropertyFilesUtil {
    
        public static void main(String[] args) throws IOException {
            String propertyFileName = "DB.properties";
            String xmlFileName = "DB.xml";
            writePropertyFile(propertyFileName, xmlFileName);
            readPropertyFile(propertyFileName, xmlFileName);
            readAllKeys(propertyFileName, xmlFileName);
            readPropertyFileFromClasspath(propertyFileName);
        }
    
        /**
         * read property file from classpath
         * @param propertyFileName
         * @throws IOException
         */
        private static void readPropertyFileFromClasspath(String propertyFileName) throws IOException {
            Properties prop = new Properties();
            prop.load(PropertyFilesUtil.class.getClassLoader().getResourceAsStream(propertyFileName));
            System.out.println(propertyFileName +" loaded from Classpath::db.host = "+prop.getProperty("db.host"));
            System.out.println(propertyFileName +" loaded from Classpath::db.user = "+prop.getProperty("db.user"));
            System.out.println(propertyFileName +" loaded from Classpath::db.pwd = "+prop.getProperty("db.pwd"));
            System.out.println(propertyFileName +" loaded from Classpath::XYZ = "+prop.getProperty("XYZ"));
    
        }
    
        /**
         * read all the keys from the given property files
         * @param propertyFileName
         * @param xmlFileName
         * @throws IOException 
         */
        private static void readAllKeys(String propertyFileName, String xmlFileName) throws IOException {
            System.out.println("Start of readAllKeys");
            Properties prop = new Properties();
            FileReader reader = new FileReader(propertyFileName);
            prop.load(reader);
            Set<Object> keys= prop.keySet();
            for(Object obj : keys){
                System.out.println(propertyFileName + ":: Key="+obj.toString()+"::value="+prop.getProperty(obj.toString()));
            }
            //loading xml file now, first clear existing properties
            prop.clear();
            InputStream is = new FileInputStream(xmlFileName);
            prop.loadFromXML(is);
            keys= prop.keySet();
            for(Object obj : keys){
                System.out.println(xmlFileName + ":: Key="+obj.toString()+"::value="+prop.getProperty(obj.toString()));
            }
            //Now free all the resources
            is.close();
            reader.close();
            System.out.println("End of readAllKeys");
        }
    
        /**
         * This method reads property files from file system
         * @param propertyFileName
         * @param xmlFileName
         * @throws IOException 
         * @throws FileNotFoundException 
         */
        private static void readPropertyFile(String propertyFileName, String xmlFileName) throws FileNotFoundException, IOException {
            System.out.println("Start of readPropertyFile");
            Properties prop = new Properties();
            FileReader reader = new FileReader(propertyFileName);
            prop.load(reader);
            System.out.println(propertyFileName +"::db.host = "+prop.getProperty("db.host"));
            System.out.println(propertyFileName +"::db.user = "+prop.getProperty("db.user"));
            System.out.println(propertyFileName +"::db.pwd = "+prop.getProperty("db.pwd"));
            System.out.println(propertyFileName +"::XYZ = "+prop.getProperty("XYZ"));
            //loading xml file now, first clear existing properties
            prop.clear();
            InputStream is = new FileInputStream(xmlFileName);
            prop.loadFromXML(is);
            System.out.println(xmlFileName +"::db.host = "+prop.getProperty("db.host"));
            System.out.println(xmlFileName +"::db.user = "+prop.getProperty("db.user"));
            System.out.println(xmlFileName +"::db.pwd = "+prop.getProperty("db.pwd"));
            System.out.println(xmlFileName +"::XYZ = "+prop.getProperty("XYZ"));
            //Now free all the resources
            is.close();
            reader.close();
            System.out.println("End of readPropertyFile");
        }
    
        /**
         * This method writes Property files into file system in property file
         * and xml format
         * @param fileName
         * @throws IOException
         */
        private static void writePropertyFile(String propertyFileName, String xmlFileName) throws IOException {
            System.out.println("Start of writePropertyFile");
            Properties prop = new Properties();
            prop.setProperty("db.host", "localhost");
            prop.setProperty("db.user", "user");
            prop.setProperty("db.pwd", "password");
            prop.store(new FileWriter(propertyFileName), "DB Config file");
            System.out.println(propertyFileName + " written successfully");
            prop.storeToXML(new FileOutputStream(xmlFileName), "DB Config XML file");
            System.out.println(xmlFileName + " written successfully");
            System.out.println("End of writePropertyFile");
        }
    
    }

    当执行这段代码时。writePropertyFile 方法会在生成上述两种格式的属性文件,并將文件存储在project的根文件夹下。
    writePropertyFile 方法生成的两种属性文件内容:
    DB.properties

    #DB Config file
    #Fri Nov 16 11:16:37 PST 2012
    db.user=user
    db.host=localhost
    db.pwd=password

    DB.xml

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
    <properties>
    <comment>DB Config XML file</comment>
    <entry key="db.user">user</entry>
    <entry key="db.host">localhost</entry>
    <entry key="db.pwd">password</entry>
    </properties>

    须要注意的是comment元素,我们在使用prop.storeToXML(new FileOutputStream(xmlFileName), "DB Config XML file");这段代码时第二个參数传入的是凝视内容,假设传入null,生成的xml属性文件將没有comment元素。


    控制台输出内容例如以下:

    Start of writePropertyFile
    DB.properties written successfully
    DB.xml written successfully
    End of writePropertyFile
    Start of readPropertyFile
    DB.properties::db.host = localhost
    DB.properties::db.user = user
    DB.properties::db.pwd = password
    DB.properties::XYZ = null
    DB.xml::db.host = localhost
    DB.xml::db.user = user
    DB.xml::db.pwd = password
    DB.xml::XYZ = null
    End of readPropertyFile
    Start of readAllKeys
    DB.properties:: Key=db.user::value=user
    DB.properties:: Key=db.host::value=localhost
    DB.properties:: Key=db.pwd::value=password
    DB.xml:: Key=db.user::value=user
    DB.xml:: Key=db.host::value=localhost
    DB.xml:: Key=db.pwd::value=password
    End of readAllKeys
    Exception in thread "main" java.lang.NullPointerException
        at java.util.Properties$LineReader.readLine(Properties.java:434)
        at java.util.Properties.load0(Properties.java:353)
        at java.util.Properties.load(Properties.java:341)
        at com.journaldev.util.PropertyFilesUtil.readPropertyFileFromClasspath(PropertyFilesUtil.java:
                      查看全文
                    
  • 相关阅读:
    linux 下安装mongodb
    python 多线程, 多进程, 协程
    5.rabbitmq 主题
    4.rabbitmq 路由
    e.target与e.currentTarget对比
    使用ffmpeg下载m3u8流媒体
    本机添加多个git仓库账号
    IE hack 条件语句
    IE8 兼容 getElementsByClassName
    IE 下 log 调试的一点不同
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7213871.html
Copyright © 2011-2022 走看看