一、Java中配置文件的三种配置位置及读取方式
1.同包:类名.class.getResourceAsStream("文件名")
package com.ctb.parse; import java.io.InputStream; import java.util.Properties; /** * java中配置文件的三种配置及读取文件 * 1.同包下 * 2.根目录下 * 3.安全路劲--WEB-INF下 * @author biao * */ public class Demo1 { public static void main(String[] args) throws Exception { //同包下获取方式 InputStream is = Demo1.class.getResourceAsStream("config.properties"); Properties pp=new Properties(); pp.load(is); System.out.println(pp.getProperty("url")); } }
2.根路径:类名.class.getResourceAsStream("/文件名")
package com.ctb.parse; import java.io.InputStream; import java.util.Properties; /** * java中配置文件的三种配置及读取文件 * 1.同包下 * 2.根目录下 * 3.安全路劲--WEB-INF下 * @author biao * */ public class Demo1 { public static void main(String[] args) throws Exception { //根目录下获取方式 InputStream is1 = Demo1.class.getResourceAsStream("/config.properties"); Properties pp1=new Properties(); pp1.load(is1); System.out.println(pp1.getProperty("url")); } }
3.WEB-INF安全路径:context.getResourceAsStream("/WEB-INF/文件名")
package com.ctb.parse; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("webinf") public class WebinfServlet extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { InputStream is = req.getServletContext().getResourceAsStream("/WEB-INF/config.properties"); Properties pp=new Properties(); pp.load(is); System.out.println(pp); } }
二、常见的xml解析工具
DOM4J
是所有xml解析中综合性能最优的产品。是一个简单、灵活的开放源代码的库,具有性能优异、功能强大和极易使用的特点。
JDOM和DOM
基于树模型,在运行的时候会将xml文件中的所有内容都加入到内存中,对内存的消耗大。适用于小文档。当文档超过15M左右的时候会出现内存溢出。
SAX解析
基于事件驱动,表现较好,这要依赖于它特定的解析方式-事件驱动。一个SAX检测即将到来的XML流,但并没有载入到内存(当然当XML流被读入时,会有部分文档暂时隐藏在内存中)。
1.简介:
它是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,DOM4J是一个非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML。
2、读取特定的xml中的内容
selectNodes():获取指定节点下的节点
selectSingleNode():获取指定节点和内容
getName():得到当前的元素名称
getText():得到元素中间的内容
attributeValue("sex"):得到元素对应的属性的值
package com.ctb.parse; import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.Properties; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; /** * dom4J的使用 * * @author biao * */ public class Demo2 { public static void main(String[] args) throws Exception { InputStream is = Demo2.class.getResourceAsStream("students.xml"); SAXReader sr = new SAXReader(); //获取文件内容 Document doc = sr.read(is); // 通过document对象获取根节点 Element ele = doc.getRootElement(); System.out.println(doc.asXML()); System.out.println("-------------"); List<Element> list = doc.selectNodes("/students/student"); //遍历 for (Element stuEle : list) { System.out.println(stuEle.asXML()); Element nameEle = (Element) stuEle.selectSingleNode("name"); System.out.println(nameEle.asXML()); System.out.println(stuEle.attributeValue("sid")); System.out.println(nameEle.getText()); } } }
3.【优点】
①大量使用了Java集合类,方便Java开发人员,同时提供一些提高性能的替代方法。
②支持XPath。
③有很好的性能。
4.【缺点】
①大量使用了接口,API较为复杂。
四、SAX 解析
1.简介
SAX 的全称是 Simple APIs for XML,也即 XML 简单应用程序接口。与 DOM 不同,SAX 提供的访问模式是一种顺序模式,这是一种快速读写 XML 数据的方式。当使用 SAX 分析器对 XML 文档进行分析时,会触发一系列事件,并激活相应的事件处理函数,应用程序通过这些事件处理函数实现对XML文档的访问,因而SAX接口也被称作事件驱动接口。
package com.ctb.parse; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.*; import org.xml.sax.helpers.DefaultHandler; /** * sax的使用 * @author biao * */ public class Demo5 extends DefaultHandler { public static void main(String args[]) { long lasting = System.currentTimeMillis(); try { SAXParserFactory sf = SAXParserFactory.newInstance(); SAXParser sp = sf.newSAXParser(); Demo5 reader = new Demo5(); sp.parse(new InputSource("src/com/ctb/parse/students.xml"), reader); } catch (Exception e) { e.printStackTrace(); } System.out.println("运行时间:" + (System.currentTimeMillis() - lasting) + "毫秒");//33毫秒 } }
【优点】
①不需要等待所有数据都被处理,分析就能立即开始。
②只在读取数据时检查数据,不需要保存在内存中。
③可以在某个条件得到满足时停止解析,不必解析整个文档。
④效率和性能较高,能解析大于系统内存的文档。
【缺点】
①需要应用程序自己负责TAG的处理逻辑(例如维护父/子关系等),文档越复杂程序就越复杂。
②单向导航,无法定位文档层次,很难同时访问同一文档的不同部分数据,不支持XPath。
五、JDOM 解析
1.目的
是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。由于是第一个Java特定模型,JDOM一直得到大力推广和促进。 JDOM文档声明其目的是“使用或更少的精力解决更多Java/XML问题”
2.【优点】
①使用具体类而不是接口,简化了DOM的API。
②大量使用了Java集合类,方便了Java开发人员。
3.【缺点】
①没有较好的灵活性。
②性能较差。
六、DOM 解析
1.简介
是用与平台和语言无关的方式表示XML文档的官方W3C标准,分析该结构通常需要加载整个文档和内存中建立文档树模型.程序员可以通过操作文档树, 来完成数据的获取 修改 删除等.
2.【优点】
①允许应用程序对数据和结构做出更改。
②访问是双向的,可以在任何时候在树中上下导航,获取和操作任意部分的数据。
3.【缺点】
①通常需要加载整个XML文档来构造层次结构,消耗资源大。
②如果XML文件比较大,容易影响解析性能且可能会造成内存溢出。
七、DOM4J - XPath 解析XML
路径表达式
1. / : 从根节点开始查找
2. // : 从发起查找的节点位置 查找后代节点 ***
3. . : 查找当前节点
4. .. : 查找父节点
5. @ : 选择属性. *
属性使用方式:
[@属性名='值']
[@属性名>'值']
[@属性名<'值']
[@属性名!='值']
package com.ctb.parse; import java.io.InputStream; import java.util.Map; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; /** * xpath定位路径 * * @author biao * */ public class Demo3 { public static void main(String[] args) throws Exception { // String str = System.getenv("students.xml"); InputStream is = Demo3.class.getResourceAsStream("students.xml"); SAXReader sr = new SAXReader(); Document doc = sr.read(is); Element nameEle = (Element) doc.selectSingleNode("/students/student[@sid='s001']/name"); System.out.println(nameEle.getText()); } }
八、DOM4J常用方法
1.获取根节点
Element root = document.getRootElement();
2.获取子节点
Element child = root.element("child");
3.获取属性
Attribute attr = root.attribute("id"); String attrValue = root.attributeValue("id");
4.遍历子节点
for (Iterator<Element> it = root.elementIterator(); it.hasNext();) { Element element = it.next(); // 处理子节点 }
5.遍历属性
for (Iterator<Attribute> it = root.attributeIterator(); it.hasNext();) { Attribute attribute = it.next(); // 处理属性 }
6.获取属性值
String value = attribute.getValue();
7.获取元素文本内容
String text = element.getText();
8.添加子节点
Element child = root.addElement("child");
9.添加属性
root.addAttribute("id", "1");
10.修改元素文本内容
element.setText("new text");
11.修改属性值
attribute.setValue("new value");
12.删除节点
root.remove(child);
今天就分享到这啦,希望能帮助到您哦💕