我們通常會將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()));}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()));}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" ));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" ));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 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 .load 0(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下再次運行程序即可。
轉載于:https://www.cnblogs.com/lanzhi/p/6468333.html
總結
以上是生活随笔 為你收集整理的JavaXml教程(十)XML作为属性文件使用 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。