搜索
首页后端开发XML/RSS教程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 方法会在生成上述两种格式的属性文件,并將文件存储在工程的根目录下。
writePropertyFile 方法生成的两种属性文件内容:
DB.properties

#DB Config file#Fri Nov 16 11:16:37 PST 2012db.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 readPropertyFileDB.properties::db.host = localhostDB.properties::db.user = 
userDB.properties::db.pwd = passwordDB.properties::XYZ = nullDB.xml::db.host = 
localhostDB.xml::db.user = userDB.xml::db.pwd = passwordDB.xml::XYZ = null
End of readPropertyFile
Start of readAllKeysDB.properties:: Key=db.user::value=userDB.properties:: 
Key=db.host::value=localhostDB.properties:: Key=db.pwd::value=passwordDB.xml:: Key=db.user::value=userDB.xml:: 
Key=db.host::value=localhostDB.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:31)
    at com.journaldev.util.PropertyFilesUtil.main(PropertyFilesUtil.java:21)

这里报了空指针异常,原因是生成的文件保存在工程的根目录下面,而读取时是从classpath下读取,將上面生成的两个属性文件拷贝到src下再次运行程序即可。

我们通常会将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 方法会在生成上述两种格式的属性文件,并將文件存储在工程的根目录下。
writePropertyFile 方法生成的两种属性文件内容:
DB.properties

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

DB.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE properties SYSTEM " 
<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 readPropertyFileDB.properties::db.host = localhostDB.properties::db.user = userDB.properties::db.pwd = passwordDB.properties::XYZ = 
nullDB.xml::db.host = localhostDB.xml::db.user = userDB.xml::db.pwd = passwordDB.xml::XYZ = null
End of readPropertyFile
Start of readAllKeysDB.properties:: Key=db.user::value=userDB.properties:: Key=db.host::value=localhostDB.properties:: Key=db.pwd::value=passwordDB.xml:: 
Key=db.user::value=userDB.xml:: Key=db.host::value=localhostDB.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:31)
    at com.journaldev.util.PropertyFilesUtil.main(PropertyFilesUtil.java:21)

以上就是Java&Xml教程(十)XML作为属性文件使用的内容,更多相关内容请关注PHP中文网(www.php.cn)!


声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
RSS和XML:了解Web内容的动态二重奏RSS和XML:了解Web内容的动态二重奏Apr 19, 2025 am 12:03 AM

RSS和XML是用于网络内容管理的工具。RSS用于发布和订阅内容,XML用于存储和传输数据。它们的工作原理包括内容发布、订阅和更新推送。使用示例包括RSS发布博客文章和XML存储书籍信息。

RSS文档:Web联合组织的基础RSS文档:Web联合组织的基础Apr 18, 2025 am 12:04 AM

RSS文档是基于XML的结构化文件,用于发布和订阅频繁更新的内容。它的主要作用包括:1)自动化内容更新,2)内容聚合,3)提高浏览效率。通过RSSfeed,用户可以订阅并及时获取来自不同来源的最新信息。

解码RSS:内容提要的XML结构解码RSS:内容提要的XML结构Apr 17, 2025 am 12:09 AM

RSS的XML结构包括:1.XML声明和RSS版本,2.频道(Channel),3.条目(Item)。这些部分构成了RSS文件的基础,允许用户通过解析XML数据来获取和处理内容信息。

如何解析和利用基于XML的RSS提要如何解析和利用基于XML的RSS提要Apr 16, 2025 am 12:05 AM

RSSFEEDSUSEXMLTOSYNDICATECONTENT; PARSINGTHEMINVOLVESLOADINGINGINGINGINSSTRUCTURE,andExtractingData.ApplicationsIncludeBuildBuildingNewSagGregatorSaterNewSagGregatorSator andTrackingPodcastepodcastepisodes。

RSS文档:他们如何提供您喜欢的内容RSS文档:他们如何提供您喜欢的内容Apr 15, 2025 am 12:01 AM

RSS文档的工作原理是通过XML文件发布内容更新,用户通过RSS阅读器订阅并接收通知。1.内容发布者创建并更新RSS文档。2.RSS阅读器定期访问并解析XML文件。3.用户浏览和阅读更新内容。使用示例:订阅TechCrunch的RSS源,只需复制链接到RSS阅读器中即可。

用XML建造供稿:RSS的动手指南用XML建造供稿:RSS的动手指南Apr 14, 2025 am 12:17 AM

使用XML构建RSSfeed的步骤如下:1.创建根元素并设置版本;2.添加channel元素及其基本信息;3.添加条目(item)元素,包括标题、链接和描述;4.转换XML结构为字符串并输出。通过这些步骤,你可以从零开始创建一个有效的RSSfeed,并通过添加额外的元素如发布日期和作者信息来增强其功能。

创建RSS文档:逐步教程创建RSS文档:逐步教程Apr 13, 2025 am 12:10 AM

创建RSS文档的步骤如下:1.使用XML格式编写,根元素为,包含元素。2.在内添加、、等元素描述频道信息。3.添加元素,每个代表一个内容条目,包含、、、等。4.可选地添加和元素,丰富内容。5.确保XML格式正确,使用在线工具验证,优化性能并保持内容更新。

XML在RSS中的作用:联合内容的基础XML在RSS中的作用:联合内容的基础Apr 12, 2025 am 12:17 AM

XML在RSS中的核心作用是提供一种标准化和灵活的数据格式。1.XML的结构和标记语言特性使其适合数据交换和存储。2.RSS利用XML创建标准化格式,方便内容共享。3.XML在RSS中的应用包括定义feed内容的元素,如标题和发布日期。4.优势包括标准化和可扩展性,挑战包括文件冗长和严格语法要求。5.最佳实践包括验证XML有效性、保持简洁、使用CDATA和定期更新。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。