Java开发中读取XML与properties配置文件的方法
相关阅读:
1.XML文件:
什么是XML?XML一般是指可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。
2.XML文件的优点:
1)XML文档内容和结构完全分离。
2)互操作性强。
3)规范统一。
4)支持多种编码。
5)可扩展性强。
3.如何解析XML文档:
XML在不同的语言中解析XML文档都是一样的,只不过实现的语法不一样,基本的解析方式有两种,一种是SAX方式,是按照XML文件的顺序一步一步解析。另外一种的解析方式DOM方式,而DOM方式解析的关键就是节点。另外还有DOM4J、JDOM等方式。本文介绍的是DOM、DOM4J方式与封装成一个工具类的方式来读取XML文档。
4.XML文档:
scores.xml:
<?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPEstudents[ <!ELEMENTstudents(student+)> <!ELEMENTstudent(name,course,score)> <!ATTLISTstudentidCDATA#REQUIRED> <!ELEMENTname(#PCDATA)> <!ELEMENTcourse(#PCDATA)> <!ELEMENTscore(#PCDATA)> ]> <students> <studentid="11"> <name>张三</name> <course>JavaSE</course> <score>100</score> </student> <studentid="22"> <name>李四</name> <course>Oracle</course> <score>98</score> </student> </students>
5.DOM方式解析XML
publicstaticvoidmain(String[]args)throwsParserConfigurationException,SAXException,IOException{
//1.创建DOM解析器工厂
DocumentBuilderFactorydbf=DocumentBuilderFactory.newInstance();
//2.由DOM解析器工厂创建DOM解析器
DocumentBuilderdb=dbf.newDocumentBuilder();
//3.由DOM解析器解析文档,生成DOM树
Documentdoc=db.parse("scores.xml");
//4.解析DOM树,获取文档内容(元素属性文本)
//4.1获取根元素scores
NodeListscoresList=doc.getChildNodes();
NodescoresNode=scoresList.item(1);
System.out.println(scoresList.getLength());
//4.2获取scores中所有的子元素student
NodeListstudentList=scoresNode.getChildNodes();
System.out.println(studentList.getLength());
//4.3对每个student进行处理
for(inti=0;i<studentList.getLength();i++){
NodestuNode=studentList.item(i);
//System.out.println(stuNode.getNodeType());
//输出元素的属性id
if(stuNode.getNodeType()==Node.ELEMENT_NODE){
Elementelem=(Element)stuNode;
Stringid=elem.getAttribute("id");
System.out.println("id------>"+id);
}
//输出元素的子元素namecoursescore
NodeListncsList=stuNode.getChildNodes();
//System.out.println(ncsList.getLength());
for(intj=0;j<ncsList.getLength();j++){
Nodencs=ncsList.item(j);
if(ncs.getNodeType()==Node.ELEMENT_NODE){
Stringname=ncs.getNodeName();
//Stringvalue=ncs.getFirstChild().getNodeValue();//文本是元素的子节点,所以要getFirstChild
Stringvalue=ncs.getTextContent();
System.out.println(name+"----->"+value);
}
}
System.out.println();
}
}
6.DOM4J方式解析XML文档:
publicstaticvoidmain(String[]args)throwsDocumentException{
//使用dom4j解析scores2.xml,生成dom树
SAXReaderreader=newSAXReader();
Documentdoc=reader.read(newFile("scores.xml"));
//得到根节点:students
Elementroot=doc.getRootElement();
//得到students的所有子节点:student
Iterator<Element>it=root.elementIterator();
//处理每个student
while(it.hasNext()){
//得到每个学生
ElementstuElem=it.next();
//System.out.println(stuElem);
//输出学生的属性:id
List<Attribute>attrList=stuElem.attributes();
for(Attributeattr:attrList){
Stringname=attr.getName();
Stringvalue=attr.getValue();
System.out.println(name+"----->"+value);
}
//输出学生的子元素:name,course,score
Iterator<Element>it2=stuElem.elementIterator();
while(it2.hasNext()){
Elementelem=it2.next();
Stringname=elem.getName();
Stringtext=elem.getText();
System.out.println(name+"----->"+text);
}
System.out.println();
}
}
当然,无论我们是使用那种方式解析XML的,都需要导入jar包(千万不要忘记)。
7.我自己的方式:
在实际开发的工程中,我们要善于使用工具类,将我们反复使用的功能封装成一个工具类,所以,下面的方式就是我在开发的过程中使用的方式.
7.1什么是properties文件:
7.1.1从结构上讲:
.xml文件主要是树形文件。
.properties文件主要是以key-value键值对的形式存在
7.1.2从灵活的角度来说:
.xml文件要比.properties文件的灵活读更高一些。
7.1.3从便捷的角度来说:
.properties文件比.xml文件配置更加简单。
7.1.4从应用程度上来说:
.properties文件比较适合于小型简单的项目,因为.xml更加灵活。
7.2自己的properties文档:
在我自己的项目中创建了一个path.properties文件,里面用来存放我即将使用的路径,以名字=值的方式存放。例如:
realPath=D:/file/
7.3解析自己的.properties文件:
publicclassPropertiesUtil{
privatestaticPropertiesUtilmanager=null;
privatestaticObjectmanagerLock=newObject();
privateObjectpropertiesLock=newObject();
privatestaticStringDATABASE_CONFIG_FILE="/path.properties";
privatePropertiesproperties=null;
publicstaticPropertiesUtilgetInstance(){
if(manager==null){
synchronized(managerLock){
if(manager==null){
manager=newPropertiesUtil();
}
}
}
returnmanager;
}
privatePropertiesUtil(){
}
publicstaticStringgetProperty(Stringname){
returngetInstance()._getProperty(name);
}
privateString_getProperty(Stringname){
initProperty();
Stringproperty=properties.getProperty(name);
if(property==null){
return"";
}else{
returnproperty.trim();
}
}
publicstaticEnumeration<?>propertyNames(){
returngetInstance()._propertyNames();
}
privateEnumeration<?>_propertyNames(){
initProperty();
returnproperties.propertyNames();
}
privatevoidinitProperty(){
if(properties==null){
synchronized(propertiesLock){
if(properties==null){
loadProperties();
}
}
}
}
privatevoidloadProperties(){
properties=newProperties();
InputStreamin=null;
try{
in=getClass().getResourceAsStream(DATABASE_CONFIG_FILE);
properties.load(in);
}catch(Exceptione){
System.err
.println("ErrorreadingconfpropertiesinPropertiesUtil.loadProps()"
+e);
e.printStackTrace();
}finally{
try{
in.close();
}catch(Exceptione){
}
}
}
/**
*提供配置文件路径
*
*@paramfilePath
*@return
*/
publicPropertiesloadProperties(StringfilePath){
Propertiesproperties=newProperties();
InputStreamin=null;
try{
in=getClass().getResourceAsStream(filePath);
properties.load(in);
}catch(Exceptione){
System.err
.println("ErrorreadingconfpropertiesinPropertiesUtil.loadProperties()"
+e);
e.printStackTrace();
}finally{
try{
in.close();
}catch(Exceptione){
}
}
returnproperties;
}
}
当我们使用之前,我们只需要给DATABASE_CONFIG_FILE属性附上值,就是我们.properties文件的名称,当使用的时候,我们就可以直接使用类名.getProperty(“realPath”);的方式就可以获取到在.properties文件中的key为realPath的内容。
以上所述是小编给大家介绍的Java开发中读取XML与properties配置文件的方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!