本篇内容主要讲解“怎么用dom4j读取xml配置文件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用dom4j读取xml配置文件”吧!
实现步骤以及源码:
1、写xml文件读取类读取xml文档内容返回Document对象,此处作为公共xml操作类,用于读取和操作xml文档内容。
点击(此处)折叠或打开
package
util;
import
java.io.File;
import
java.io.FileWriter;
import
java.io.IOException;
import
java.io.InputStream;
import
java.io.StringReader;
import
java.net.URL;
import
org.apache.log4j.Logger;
import
org.dom4j.Document;
import
org.dom4j.DocumentException;
import
org.dom4j.io.OutputFormat;
import
org.dom4j.io.SAXReader;
import
org.dom4j.io.XMLWriter;
public
class
XMLHelper
{
private
static
Logger
logger=Logger.getLogger(XMLHelper.class);
/**
* 描述:读取xml文件返回Docment对象
* @author vensins
* @created 2017年7月27日 下午5:22:17
* @since
* @param xmlFile
* xml文件file对象
* @return
*/
public
static
Document
getDocument(File
xmlFile){
try
{
SAXReader saxReader=new
SAXReader();
return
saxReader.read(xmlFile);
}
catch
(DocumentException e)
{
logger.error("读取xml文件出错,返回nulll",e);
return
null;
}
}
/**
* 描述:读取xml文档返回Document对象
* @author vensins
* @created 2017年7月27日 下午5:26:03
* @since
* @param xmlString
* xml文档路径
* @return
*/
public
static
Document
getDocument(String
xmlString){
try
{
if(xmlString==null||xmlString.equals(""))
return
null;
SAXReader saxReader=new
SAXReader();
File
file=new
File(xmlString);
return
saxReader.read(file);
}
catch
(DocumentException e)
{
logger.error("读取xml文件失败!",e);
return
null;
}
}
/**
* 描述:读取xml文档内容返回Document对象
* @author vensins
* @created 2017年7月27日 下午5:36:02
* @since
* @param xmlString
* @return
*/
public
static
Document
getDocumentFromString(String
xmlString){
try
{
if(xmlString==null||xmlString.equals(""))
return
null;
SAXReader saxReader=new
SAXReader();
return
saxReader.read(new
StringReader(xmlString));
}
catch
(DocumentException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return
null;
}
/**
* 描述:保存Document文档到文件
* @author vensins
* @created 2017年7月27日 下午5:41:24
* @since
* @param document
* Document对象
* @param filePath
* 保存文件的路径
* @param outputFormat
* 保存文件的格式(GBK,UTF-8)
* @return
*/
public
static
boolean
saveToFile(Document
document,String
filePath,OutputFormat outputFormat){
XMLWriter
writer;
File
file=new
File(filePath);
if(!file.exists()){
try
{
file.createNewFile();
if(!file.isDirectory())
return
false;
}
catch
(IOException
e)
{
logger.error("创建文件'"+filePath+"'失败",e);
return
false;
}
}
try
{
writer=new
XMLWriter(new
FileWriter(new
File(filePath)));
writer.write(document);
writer.close();
return
true;
}
catch
(IOException
e)
{
logger.error("写文件"+filePath+"'出错",e);
}
return
false;
}
/**
* 描述:写入DOcument对象到xml
* @author vensins
* @created 2017年7月27日 下午5:38:10
* @since
* @param filePath
* @param doc
* @return
*/
public
static
boolean
writeToXml(String
filePath,Document
doc){
OutputFormat
format=new
OutputFormat();
format.setEncoding("GBK");
if(saveToFile(doc,
filePath,
format))
return
true;
return
false;
}
/**
* 描述:指定位置读取xml文件
* @author vensins
* @created 2017年7月27日 下午5:58:13
* @since
* @param cls
* @param XmlFile
* @return
*/
public
static
Document
getDocument(Class
cls,String
XmlFile){
Document
document
=
null;
ClassLoader
loader
=
cls.getClassLoader();
// 先从当前类所处路径的根目录中寻找属性文件
File
f;
URL
url
=
loader.getResource(XmlFile);
if
(
url
!=
null
)
{
f
=
new
File(url.getPath());
if
(
f
!=
null
&&
f.exists()
&&
f.isFile()
)
{
document=XMLHelper.getDocument(f);
}else{
InputStream
ins=null;
try
{
if(loader!=null){
ins=loader.getResourceAsStream(XmlFile);
}
if(ins!=null){
SAXReader saxReader=new
SAXReader();
document=saxReader.read(ins);
}
}
catch
(DocumentException e)
{
logger.error("读取xml文件'"+XmlFile+"'失败",e);
}finally{
try
{
if(ins!=null){
ins.close();
ins=null;
}
}
catch
(IOException
e)
{
logger.error("",e);
}
}
}
}
return
document;
}
}
2、写配置文件公共操作类,用于取配置文件中的配置信息
实现思路:对读取的xml的document对象进行解析,以键值对的形式存入map对象,取配置值时通过键值对(父级配置项目.子级配置项)的形式取出对应的配置信息
点击(此处)折叠或打开
package
util;
import
java.util.HashMap;
import
java.util.Iterator;
import
java.util.List;
import
java.util.Map;
import
org.apache.log4j.Logger;
import
org.dom4j.Document;
import
org.dom4j.Element;
public
class
Configuration
{
private
static
Logger
logger=Logger.getLogger(Configuration.class);
private
static
String
CONFIG_FILE_NAME="conf/configuration.xml";
private
static
Map
itemMap=new
HashMap();
static{
load_config();
}
private
static
void
load_config(){
try{
Document
document
=
XMLHelper.getDocument(Configuration.class,
CONFIG_FILE_NAME);
if(document!=null){
Element
element=document.getRootElement();
List
catList=element.elements("category");
for
(Iterator
catIter=catList.iterator();catIter.hasNext();)
{
Element
catElement=(Element)
catIter.next();
String
catName=catElement.attributeValue("name");
if(catName==null||catName.equals(""))
continue;
List
itemList=catElement.elements("item");
for
(Iterator
itemIter=itemList.iterator();itemIter.hasNext();)
{
Element
itemElement=(Element)
itemIter.next();
String
itemName=itemElement.attributeValue("name");
String
value=itemElement.attributeValue("value");
if
(itemName==null||itemName.equals(""))
continue;
itemMap.put(catName+"."+itemName,
value);
}
}
}
}catch(Exception
ex){
logger.error("读取配置文件错误",ex);
}
}
/**
* 描述:获取字符串配置值
* @author vensins
* @created 2017年7月28日 上午9:33:39
* @since
* @param name
* @return
*/
public
static
String
getString(String
name){
String
value=(String)
itemMap.get(name);
return
value==null?"":value;
}
/**
* 描述:获取字符串配置值,为空时取默认值
* @author vensins
* @created 2017年7月28日 上午9:36:47
* @since
* @param name
* @param defaultValue
* @return
*/
public
static
String
getString(String
name,String
defaultValue){
String
value=(String)
itemMap.get(name);
return
value==null||value.equals("")?defaultValue:value;
}
/**
* 描述:获取配置文件中的整数项配置
* @author vensins
* @created 2017年7月28日 上午9:41:49
* @since
* @param name
* @return
*/
public
static
int
getInt(String
name){
String
value=(String)
itemMap.get(name);
try
{
return
Integer.parseInt(value);
}
catch
(Exception
e)
{
logger.error("配置文件key["+name+"]配置错误,return 0",e);
return
0;
}
}
/**
* 描述:获取配置文件中的整数项配置,错误是返回默认值
* @author vensins
* @created 2017年7月28日 上午9:43:12
* @since
* @param name
* @param defaultValue
* @return
*/
public
static
int
getInt(String
name,int
defaultValue){
String
value=(String)
itemMap.get(name);
try
{
return
Integer.parseInt(value);
}
catch
(Exception
e)
{
logger.error("配置文件key["+name+"]配置错误,返回默认值"+defaultValue,e);
return
defaultValue;
}
}
/**
* 描述:获取配置文件中的boolean值
* @author vensins
* @created 2017年7月28日 上午9:46:29
* @since
* @param name
* @return
*/
public
static
boolean
getBoolean(String
name){
String
value=(String)
itemMap.get(name);
return
Boolean.valueOf(value).booleanValue();
}
/**
* 描述:获取配置文件中的Double值
* @author vensins
* @created 2017年7月28日 上午9:51:24
* @since
* @param name
* @param defaultValue
* @return
*/
public
static
Double
getDouble(String
name,Double
defaultValue)
{
String
value=(String)
itemMap.get(name);
try
{
return
Double.parseDouble(value);
}
catch
(Exception
e)
{
logger.error("配置文件key["+name+"]配置错误,返回默认值"+defaultValue,e);
return
defaultValue;
}
}
public
static
Map
getItems(){
return
itemMap;
}
}
以下内容为xml文件的内容模板以及使用样例
点击(此处)折叠或打开
<?xml
version="1.0"
encoding="GBK"?>
<system>
<category name="test1"
description="配置信息二">
<item name="test1-1"
value="1"
description=""
/>
</category>
<category name="test2"
description="配置信息二">
<item name="test2-1"
value="0"
description=""
/>
<item name="test2-2"
value="12.4"
description=""
/>
<item name="test2-3"
value="啊啊啊"
description=""
/>
</category>
</system>
读取时使用Configuration.getString("test1.test1-1")获取 到配置值"1"
读取时使用Configuration.getString("test2.test1-3")获取 到配置值"啊啊啊"
到此,相信大家对“怎么用dom4j读取xml配置文件”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。