您的位置:首页 > 运维架构

XML解析中的dom4j以及properties文件读取

2019-05-26 23:38 134 查看

properties文件读取

第一种:

properties文件的解析方式有java.util.properties这个类来完成
根据存放位置

1、根目录下
Xxx.class.getResourceAsStream("/config.properties");
2、与读取配置文件的类在同一包
Xxx.class.getResourceAsStream("config2.properties");
3、WEB-INF(或其子目录下)
ServletContext application = this.getServletContext();
InputStream is = application.getResourceAsStream("/WEB-INF/config3.properties");

为什么放在WEB-INF的文件必须要全局上下文才能取到呢?
原因:WEB-INF是一个安全目录,也就是不能被外界访问的一个目录,只能通过内部配置web.xml通过servlet来访问

当我的文件在我的根目录下(Source Folder)

public static void main(String[] args) throws IOException {
//将当前同包下的db.properties资源文件转换成输入流
//		斜杆/ 代表根目录
InputStream in = PropertiesDemo.class.getResourceAsStream("/db.properties");
Properties p=new Properties();
p.load(in);
System.out.println(p.getProperty("uname"));
System.out.println(p.getProperty("upass"));
}

第二种方式:

如果不是同包的情况下,而是放在根目录下,我们就只要 在 db.properties 加个斜杠 " / " 就好了

public class proServlet 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 {
ServletContext context = req.getServletContext();	//声明一个全局上下文
InputStream in = context.getResourceAsStream("/WEB-INF/db.properties");//获取到WEB_INF的文件
Properties p=new Properties();
p.load(in);
System.out.println(p.getProperty("uname"));//打印到控制台
System.out.println(p.getProperty("upass"));
}
}

什么叫做XML解析?

1、XML解析——Java中XML的四种解析方式
XML是一种通用的数据交换格式,它的平台无关性、语言无关性、系统无关性、给数据集成与交互带来了极大的方便。XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不同而已。

XML的解析方式分为四种:1、DOM解析;2、SAX解析;3、JDOM解析;4、DOM4J解析。
其中前两种属于基础方法,是官方提供的平台无关的解析方式;后两种属于扩展方法,它们是在基础的方法上扩展出来的,只适用于java平台。

2、比较总结XML中几种解析方式
  DOM4J性能最好,连Sun的JAXM也在用DOM4J。目前许多开源项目中大量采用DOM4J,例如大名鼎鼎的Hibernate也用DOM4J来读取XML配置文件。如果不考虑可移植性,那就采用DOM4J(由外到内解析)。

dom4j 解析xml文件

DOM 是这样规定的:
整个文档是一个文档节点
每个 XML 标签是一个元素节点
包含在 XML 元素中的文本是文本节点
每一个 XML 属性是一个属性节点
注释属于注释节点

案例:建立一个student.xml,获得小王


然后建立一个方法来获得我们需要的

public static void main(String[] args) throws DocumentException {
InputStream in = XmlParseDemo.class.getResourceAsStream("students.xml");
SAXReader reader = new SAXReader();
Document doc = reader.read(in);
//		System.out.println(doc.asXML());//输出整个xml文件的值
//		1、获取到所有的学生
List<Element> stules = doc.selectNodes("/students/student");//查student这一组节点
//		2、遍历
for (Element stu : stules) {
if("s003".equals(stu.attributeValue("sid"))) {
Node nameEle = stu.selectSingleNode("name");//查name单个节点
//				System.out.println(nameEle.asXML());//打印<name>小王</name>
System.out.println(nameEle.getText());//打印小王,这是第一种方法,通过遍历判断
}
}
//		做判断、如果sid=s003那么拿到小王
Node stuEleS003 = doc.selectSingleNode("/students/student[@sid='s003']");
System.out.println(stuEleS003.selectSingleNode("name").getText());
}

然后就可以得到小王

今天就更新到这里
喜欢的可以关注我
不定时更新

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: