java xml 读取库_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:

]>

张三

JavaSE

100

李四

Oracle

98

5.DOM方式解析XML

public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {

//1.创建DOM解析器工厂

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

//2.由DOM解析器工厂创建DOM解析器

DocumentBuilder db = dbf.newDocumentBuilder();

//3.由DOM解析器解析文档,生成DOM树

Document doc = db.parse("scores.xml");

//4.解析DOM树,获取文档内容(元素 属性 文本)

//4.1获取根元素scores

NodeList scoresList = doc.getChildNodes();

Node scoresNode = scoresList.item(1);

System.out.println(scoresList.getLength());

//4.2获取scores中所有的子元素student

NodeList studentList = scoresNode.getChildNodes();

System.out.println(studentList.getLength());

//4.3对每个student进行处理

for(int i=0;i

Node stuNode = studentList.item(i);

//System.out.println(stuNode.getNodeType());

//输出元素的属性 id

if(stuNode.getNodeType()==Node.ELEMENT_NODE){

Element elem =(Element)stuNode;

String id= elem.getAttribute("id");

System.out.println("id------>"+id);

}

//输出元素的子元素 name course score

NodeList ncsList = stuNode.getChildNodes();

//System.out.println(ncsList.getLength() );

for(int j=0;j

Node ncs = ncsList.item(j);

if(ncs.getNodeType() == Node.ELEMENT_NODE){

String name = ncs.getNodeName();

//String value = ncs.getFirstChild().getNodeValue();//文本是元素的子节点,所以要getFirstChild

String value = ncs.getTextContent();

System.out.println(name+"----->"+value);

}

}

System.out.println();

}

}

6.DOM4J方式解析XML文档:

public static void main(String[] args) throws DocumentException {

//使用dom4j解析scores2.xml,生成dom树

SAXReader reader = new SAXReader();

Document doc = reader.read(new File("scores.xml"));

//得到根节点:students

Element root = doc.getRootElement();

//得到students的所有子节点:student

Iterator it = root.elementIterator();

//处理每个student

while(it.hasNext()){

//得到每个学生

Element stuElem =it.next();

//System.out.println(stuElem);

//输出学生的属性:id

List attrList = stuElem.attributes();

for(Attribute attr :attrList){

String name = attr.getName();

String value = attr.getValue();

System.out.println(name+"----->"+value);

}

//输出学生的子元素:name,course,score

Iterator it2 = stuElem.elementIterator();

while(it2.hasNext()){

Element elem = it2.next();

String name = elem.getName();

String text = 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文件:

public class PropertiesUtil {

private static PropertiesUtil manager = null;

private static Object managerLock = new Object();

private Object propertiesLock = new Object();

private static String DATABASE_CONFIG_FILE = "/path.properties";

private Properties properties = null;

public static PropertiesUtil getInstance() {

if (manager == null) {

synchronized (managerLock) {

if (manager == null) {

manager = new PropertiesUtil();

}

}

}

return manager;

}

private PropertiesUtil() {

}

public static String getProperty(String name) {

return getInstance()._getProperty(name);

}

private String _getProperty(String name) {

initProperty();

String property = properties.getProperty(name);

if (property == null) {

return "";

} else {

return property.trim();

}

}

public static Enumeration> propertyNames() {

return getInstance()._propertyNames();

}

private Enumeration> _propertyNames() {

initProperty();

return properties.propertyNames();

}

private void initProperty() {

if (properties == null) {

synchronized (propertiesLock) {

if (properties == null) {

loadProperties();

}

}

}

}

private void loadProperties() {

properties = new Properties();

InputStream in = null;

try {

in = getClass().getResourceAsStream(DATABASE_CONFIG_FILE);

properties.load(in);

} catch (Exception e) {

System.err

.println("Error reading conf properties in PropertiesUtil.loadProps() "

+ e);

e.printStackTrace();

} finally {

try {

in.close();

} catch (Exception e) {

}

}

}

/**

* 提供配置文件路径

*

* @param filePath

* @return

*/

public Properties loadProperties(String filePath) {

Properties properties = new Properties();

InputStream in = null;

try {

in = getClass().getResourceAsStream(filePath);

properties.load(in);

} catch (Exception e) {

System.err

.println("Error reading conf properties in PropertiesUtil.loadProperties() "

+ e);

e.printStackTrace();

} finally {

try {

in.close();

} catch (Exception e) {

}

}

return properties;

}

}

当我们使用之前,我们只需要给 DATABASE_CONFIG_FILE 属性附上值,就是我们.properties文件的名称,当使用的时候,我们就可以直接使用类名. getProperty(“realPath”);的方式就可以获取到在.properties文件中的key为realPath的内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/554973.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java8——Stream流操作List排序_List集合中每个对象元素按时间顺序排序

一个学生类的实体类 Data public class Student {private Long id;private String name;private int age;private Double height;public Student(Long id, String name, int age, Double height) {this.id id;this.name name;this.age age;this.height height;}然后我们测…

java线程初始方法三种_Java 多线程 三种实现方式

Java多线程实现方式主要有三种:继承Thread类、实现Runnable接 口、使用ExecutorService、Callable 实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种Callable是带返回值的,返回结果可以从Future中取出来关于Exe…

Java——闰年的判断方法,闰年概念

概念: 闰年分为普通闰年和世纪闰年。 普通闰年是能被4整除但不能被100整除的年份为普通闰年世纪闰年就是能被400整除的为世纪闰年 算闰年的方法很简单,只需要把要计算的年份除以四,如果能够整除,也就是没有小数点,那么这一年就…

java控制层创建websocket_用Java构建一个简单的WebSocket聊天室

前言首先对于一个简单的聊天室,大家应该都有一定的概念了,这里我们省略用户模块的讲解,而是单纯的先说说聊天室的几个功能:自我对话、好友交流、群聊、离线消息等。今天我们要做的demo就能帮我们做到这一点啦!&#xf…

Java中Date与 LocalDateTime ,LocalDate之间的转换

Date与LocalDateTime和LocalDate互相转换思路 Date转LocalDateTime和LocalDate都可以通过Date先转换成Instant然后再转换成LocalDateTime和LocalDate,可以按照下图的方式进行转换。LocalDateTime和LocalDate转换成Date也是以Instant为中介来进行转换的。 1&#xff…

Spring-data-jpa入门(一)

啥是JPA 我这个小白没有听说过,全英文名叫Java Persistence API,就是java持久化api,是SUN公司推出的一套基于ORM的规范。 持久化想必如雷贯耳,都2022年了,谁还不用个持久化框架啊,举起mybatis。 ORM呢&a…

struts单例模式 java_Java单例设计模式详细介绍

Java单例设计模式教程中包含了单例模式的定义、特点以及线路安全等问题。单例模式定义:单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对…

Java8排序 Stream的sorted方法

Java 8 Stream之sorted()排序示例:使用java 8 的流式sorted排序List集合 Stream.sorted 字段排序 功能说明:以自然序或着自定义Comparator 接口排序规则来排序一个流。 功能详细说明: 1、sorted() 默认使用自然序排序, 其中的元素必须实现…

java创建bst树_JAVA生成BST(二叉查找树)树

public class BST> {public Node root; //二叉树的根节点private class Node{private Key key; //键private Node left,right; //指向子树的连接public Node(Key key){this.key key;}}public void insertRec(Key key){root insertRec(root,key);}private Nod…

NetBeans、Eclipse 和 IDEA,哪个才是最优秀的Java IDE?

NetBeans、Eclipse 和 IDEA,哪个才是最优秀的Java IDE? 本文将向您介绍三种流行的Java IDE的基本特点,并比较它们的优缺点。 众所周知,集成开发环境(IDE)能够让程序员的日常编程过程,比起直接在文本编辑器上编写代码要容易得多。…

java调用c so动态库_jni 调用C动态库dll/so

http://hi.baidu.com/fengying765/blog/item/7081113e5fde53e555e7233f.html作为主调方的Java源程序TestJNI.java如下。代码清单15-4 在Linux平台上调用C函数的例程——TestJNI.java1. public class TestJNI2. {3. static4. {5. Syst…

Spring-data-jpa入门(二)

前言 上一节我们讲解了spring-data-jpa最基础的架构和最简单的增删查改的实现,可以发现spring-data-jpa在简单增删查改的实现是非常友好的,甚至根本见不着sql语句的存在,让人直呼NB。 还记得上一节埋的几个坑吗,这一节就先把坑填…

JAVA对象集合转化为xml转换_xml转为Map集合以及对象转化为xml

1.[代码][Java]代码package com.fang.util;import java.io.InputStream;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.SAXRe…

JavaWeb学习笔记——详细

一、HTTP协议简介 1、什么是http协议 概述: HTTP是Hyper Text Transfer Protocol的缩写,即超文本传输协议。它是一种请求/响应式的协议,客户端在与服务器端建立连接后就可以向服务器端发送请求,这种请求被称作HTTP请求&#xf…

java中如何使用add方法_使用Java中的Calendar.add()方法将秒添加到当前日期

为Java中的Calendar类导入以下软件包。import java.util.Calendar;首先,创建一个Calendar对象并显示当前日期和时间。Calendar calendar Calendar.getInstance();System.out.println("Current Date and Time " calendar.getTime());现在,让…

基本数据类型和包装类的区别,编程中如何选择?

问题:基本数据类型和包装类有什么区别吧,什么时候用包装类什么时候用基本数据类型? 最本质的区别:基本数据类型不是对象,包装类型是对象存储位置不同:基本类型是直接将变量值存储在栈中,而包装…

java怎么获取控制台内容的类型_java 怎么获取控制台的数据并且输出到GUI上

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼以前做过,给个参考。为防止格式错乱,以下代码用base64解码一下得到格式良好的代码。aW1wb3J0IG9yZy5qdW5pdC5UZXN0OwoKaW1wb3J0IGphdmEuaW8uKjsKaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmltcG9ydCBqYXZhLnV0a…

Python Flask Web 框架入门

Flask是一个轻量级的基于Python的web框架。 1. 简介 这份文档中的代码使用 Python 3 运行。 是的,所以读者需要自己在电脑上安装Python 3 和 pip3。建议安装最新版本,我使用的是Python 3.6.4。 安装方法,可以自行谷歌或者百度。 建议在 lin…

php与mysql手册下载地址_PHP与Mysql的连接

呼,搞了足足两天零12个小时05分17秒,恍然大悟,原来我把数据库的名字写错了,导致这两天零12个小05分17秒的时间,都在迷惘中度过,不过现在算是解决了,所来特来发下心得体会。 忠告:写程…

描述一下JAVA的加载过程_JVM源码分析之Java类的加载过程

简书 占小狼转载请注明原创出处,谢谢!趁着年轻,多学习背景最近对Java细节的底层实现比较感兴趣,比如Java类文件是如何加载到虚拟机的,类对象和方法是以什么数据结构存在于虚拟机中?虚方法、实例方法和静态方…