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配置文件的方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!