-
后缀为.properties的文件,称之为属性文件,它可以很方便的存储一些类似于键值对的数据。经常当做软件的配置文件使用。
-
而xml文件能够表示更加复杂的数据关系,比如要表示多个用户的用户名、密码、家乡、性别等。在后面,也经常当做软件的配置文件使用。
属性文件:
定义:
1.Properties是什么?
Properties是Map接口下面的一个实现类,所以Properties也是一种双列集合,用来存储键值对。 但是一般不会把它当做集合来使用。
2.Properties核心作用?
Properties类的对象,用来表示属性文件,可以用来读取属性文件中的键值对。
特点:
-
属性文件后缀以
.properties
结尾 -
属性文件里面的每一行都是一个键值对,键和值中间用=隔开。比如:
admin=123456
-
#
表示这样是注释信息,是用来解释这一行配置是什么意思。 -
每一行末尾不要习惯性加分号,以及空格等字符;不然会把分号,空格会当做值的一部分。
-
键不能重复,值可以重复
解析:
使用Properties读取属性文件中的键值对,需要用到的方法如下。
1、创建一个Properties的对象出来(键值对集合,空容器)
2、调用load(字符输入流/字节输入流)方法,开始加载属性文件中的键值对数据到properties对象中去
3、调用getProperty(键)方法,根据键取值
package properties;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;
public class Test {
public static void main(String[] args) throws IOException {
//准备工作
File file = new File("D:\\Java文件\\A高级Java代码\\specialFile\\src\\properties\\user.properties");
// System.out.println(file.exists());
//创建properties对象
Properties properties = new Properties();
//加载文件
properties.load(new FileInputStream(file));
//获得文件
String userName = properties.getProperty("userName");
String passWord = properties.getProperty("passWord");
String age = properties.getProperty("age");
String jdbcUserName = properties.getProperty("jdbc.userName");
System.out.println(userName);
System.out.println(passWord);
System.out.println(age);
System.out.println(jdbcUserName);
}
}
XML文件
定义:
XML文件是可扩展的标记语言,由一些标签组成,这些标签可以自定义,本质是一种数据格式,可以用来表示复杂的数据关系
XML文件有如下的特点:
-
XML中的
<标签名>
称为一个标签或者一个元素,一般是成对出现的。 -
XML中的标签名可以自己定义(可扩展),但是必须要正确的嵌套
-
XML中只能有一个根标签。
-
XML标准中可以有属性
-
XML必须第一行有一个文档声明,格式是固定的
<?xml version="1.0" encoding="UTF-8"?>
-
XML文件必须是以.xml为后缀结尾
<?xml version="1.0" encoding="UTF-8"?>
<根元素名>
<元素名 属性名="属性值" 属性名2="属性值2">
</元素名>
</根元素名>
注意事项(标识符):
上面XML文件中的数据格式是最为常见的,标签有属性、文本、还有合理的嵌套。XML文件中除了写以上的数据格式之外,还有一些特殊的字符不能直接写。
-
像
<,>,&
等这些符号不能出现在标签的文本中,因为标签格式本身就有<>,会和标签格式冲突。如果标签文本中有这些特殊字符,需要用一些占位符代替。
< 表示 <
> 表示 >
& 表示 &
' 表示 '
" 表示 "
如果在标签文本中,出现大量的特殊字符,不想使用特殊字符,此时可以用CDATA区,格式如下
<data1>
<![CDATA[
3 < 2 && 5 > 4
]]>
</data1>
XML解析:(java解析XML)
使用程序读取XML文件中的数据,称之为XML解析。这里并不需要我们自己写IO流代码去读取xml文件中的数据。其实有很多开源的,好用的XML解析框架,最知名的是DOM4J(第三方开发的)
首先导包:
DOM4J解析XML需要用到的方法如下图所示
XML解析的过程,是从根元素开始,从外层往里层解析。 我们先把Document对象,和根元素获取出来
获取到XML文件的根元素之后,接下来,就可以用根元素在获取到它里面的子元素(包括子标签、表属性等)。需要用到的方法如下图所示
具体代码如下:
<?xml version="1.0" encoding="UTF-8" ?>
<users>
<user id = "1" desc = "第一个人">
<name>张三</name>
<address>内'蒙"古</address>
<age>18</age>
</user>
<people>很多&人</people>
<user id = "2">
<name>李四</name>
<address>江<苏</address>
<age>2>0</age>
<sex>女</sex>
<code>
<![CDATA[
<name>"王二麻子"</name>
<address><浙江></address>
<age>1&1</age>
]]>
</code>
</user>
</users>
解析代码:
package xml;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.List;
public class Dom4JTest1 {
public static void main(String[] args) throws Exception{
File file = new File("D:\\Java文件\\A高级Java代码\\specialFile\\src\\xml\\user.xml");
//创建核心工具库
SAXReader saxReader = new SAXReader();
//通过工具类,解析xml,获得整个文档Document
Document document = saxReader.read(file);
//通过文档获得根元素Element users
Element root = document.getRootElement();
//根元素的元素名
System.out.println(root.getName());
//通过根元素获得所有的user元素
List<Element> userElementList = root.elements("user");
//遍历所有user元素
for (Element userElement : userElementList) {
//获得id属性的值
String id = userElement.attributeValue("id");
System.out.println(id); //1 2
//获得desc属性的值
Attribute descAttribute = userElement.attribute("desc");
if (descAttribute != null){
//如果属性不存在 对象为null
String descValue = descAttribute.getValue();
System.out.println(descValue); //第一个人 2
}
//获得name子元素的值
String nameText = userElement.elementText("name");
System.out.println("name:" + nameText); //张三 李四
//获得age子元素的值
Element ageElement = userElement.element("age");
String ageText = ageElement.getText();
// 去掉回车换getTextTrim()
// String ageText = ageElement.getTextTrim();
System.out.println("age:" + ageText); //18 2>0
//获得code子元素的值
String code = userElement.elementText("code");
System.out.println("code" + code);
}
}
}
XML约束:
规定xml文件如何编写的文件