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:
Java&Xml教程(十)XML作为属性文件使用的更多相关文章
- ComicEnhancerPro 系列教程十八:JPG文件长度与质量
作者:马健邮箱:stronghorse_mj@hotmail.com 主页:http://www.comicer.com/stronghorse/ 发布:2017.07.23 教程十八:JPG文件长度 ...
- IoC容器-Bean管理XML方式(引入外部属性文件)
IoC操作Bean管理(引入外部属性文件) 1,直接配置数据库信息 (1)配置德鲁伊连接池 (2)引入德鲁伊连接池依赖jar包 2,通过引入外部属性文件配置数据库连接池 (1)创建外部属性文件,pro ...
- java 如何读取src根目录下的属性文件
在java项目中,如何获取src根目录下的属性文件/资源文件呢? 有如下三种方式: 方式一: InputStream in = Test.class .getResourceAsStream(&quo ...
- java读取项目或包下面的属性文件方法
1.使用java.util.Properties类的load()方法 //文件在项目下.不是在包下!! InputStream in = new BufferedInputStream(newFile ...
- Java&Xml教程(十)XML作为属性文件使用
我们通常会将Java应用的配置参数保存在属性文件中,Java应用的属性文件可以是一个正常的基于key-value对,以properties为扩展名的文件,也可以是XML文件. 在本案例中,將会向大家介 ...
- Java&Xml教程(六)使用JDOM解析XML文件
JDOM 提供了非常优秀的Java XML API来更方便的读取.修改.生成XML文档.JDOM还提供了包装类供用户从SAX.DOM.STAX事件解析.STAX流解析中选择具体的实现. 在本教程中,我 ...
- Java&Xml教程(四)使用DOM方式生成XML文件
在前面的教程中,我们学习了使用DOM解析方式读取和修改XML文件内容,今天我们来学习如何使用DOM解析机制生成XML文件. 下面是我们对要生成的XML文件的具体要求: 1.根节点元素为"Em ...
- Java&Xml教程(一)简介
XML是广泛用于数据传输和存储的技术.Java语言提供个各种各样的API来解析XML,例如DOM.SAX.StAX.JAXB.也还有一些其他的API用于解析XML,例如JDOM.本教程的目的是探索使用 ...
- Java学习笔记(十)——xml
[前面的话] 学习过程中还是效率不够高,老是容易注意力不集中,着急啊.不能在这样了,要好好学习,好好努力. 学习过程中的小知识点总结,基础知识,选择阅读. [xml定义] 定义:可扩展标记语言(英语: ...
随机推荐
- Spring Boot学习——Spring Boot配置文件application
Spring Boot配置文件有两种格式: application.properties 和 application.yml.两种配置文件只需要使用一个. 这两种配置文件的语法有些区别,如下 1. a ...
- Scala 封装可break和continue的foreach循环
发现scala里没有break和continue, 有时候实在是需要的话就要自己try catch异常,代码看起来有点蛋疼, 所以封装了一个可break和continue的foreach. impor ...
- bonds
Linux--多网卡的7种Bond模式 http://www.cnblogs.com/lcword/p/5914089.html 七种网卡绑定模式详解: http://blog.csdn.net/w ...
- hdu 3440(差分约束好题)
House Man Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- json.net(Json.NET - Newtonsoft)利用动态类解析json字符串
将对象转换为字符串很简单,唯一要注意的点就是为了避免循环要在需要的字段上添加jsonignore属性.可以参照这篇博文:http://www.mamicode.com/info-detail-1456 ...
- (19)python scrapy框架
安装scrapy pycharm 建个纯python工程 settings里 环境变量设置 C:\Python27;C:\Python27\Scripts; 下载win32api https://so ...
- 2017省选集训测试赛(二十五)Problem B recollection
@(XSY)[后缀数组, 启发式合并, ST表] Description Solution 后缀数组 + 启发式合并 + Sparse Table. 这是第一次写树上后缀数组. 对以每个点为根的子树统 ...
- 我眼中的AI
!!!!本文禁止转载,引用,仅供观看 最初了解人工智能是在我上大二的时候,在看头条的时候经常看到有关人工智能的事情,当时的我和大多数的人一样,感觉人工智能很神奇.当时就整晚整晚的想人工智能会取代人类呀 ...
- NV 3D投影方案 【转】
http://tu.pcpop.com/all-677013.htm 1/8 NVIDIA 3D方案涉及图形处理器(GPU).信号发射器.快门式3D眼镜.3D播放软件以及经过NVIDIA认证的显示器. ...
- FenceSyne, flush, wait
我看了下queue, command 的fence这个东西,它是做queque之间 queue和cpu之间同步用的 我理解下来就是这样 有两个condition ALL_GPU_COMMANDS_CO ...