特殊文件的读取

properties

Properties 是代表属性的意思,在Java中常常用这种后缀类型的文件作为配置文件。

配置文件出来了,那必然是需要我们去读取的,如果用字符流读取可以但是没必要,用读取properties常用的方法往往无往而不利。

概述

  • 定义:属于map中的一员,也是双列集合;

类似于:

image-20240404190204009

  • 作用:专门与后缀名是properties的文件相互结合,可以方便的把集合中的数据存入文件,也能把文件中的数据读到集合中;

  • 使用步骤

    • 利用构造方法创建对象;

    • 利用成员方法,完成功能;

  • 构造方法

image-20230528102525752

  • 常用方法

image-20230528102539935

image-20230528103410774

参考代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/*
Properties 是Java中常见的配置文件,一般对于配置文件的读取都是遵循一定套路的,不会直接拿着字节流/字符流来读取
*/
public class myProperties {
public static void main(String[] args) throws Exception {
// 1, 创建集合
Properties p = new Properties();
// 2, 逐个添加数据
p.setProperty("aa", "11");
p.setProperty("bb", "22");
p.setProperty("cc", "33");
System.out.println(p);
// 单纯打印有点类似于Python中的字典:{aa=11, bb=22, cc=33}
// 3, 直接读取某个文件中的数据到集合中(字符流和字节流都可以使用
//FileReader fr = new FileReader("C:\\Users\\admin\\Desktop\\opt\\Java\\day11\\files\\2.properties");
FileInputStream fr = new FileInputStream("C:\\Users\\admin\\Desktop\\opt\\Java\\day11\\files\\2.properties");
p.load(fr);
System.out.println(p);
// 4, 根据key取值
System.out.println(p.getProperty("name"));
// 5, 获取所有的Key
Set<String> set = p.stringPropertyNames();
for (String s : set) {
System.out.println(s + "---->" + p.getProperty(s));
}

}
}

xml

概述

是一门可扩展的标记语言;

  • 作用

    • 通过自定义的标记,存储或表示数据用的;通过开发中会使用xml文件当成系统的配置文件(存储着如何让程序运行的信息)使用;
  • 语法

    • 所有的内容都是由标签(标记)组成;

    • 标签由 < 自定义的名称 >,必须有开头,由结尾;

    • 文档的第一行第一列必须是固定的文档声明;

    • 属性必须使用双引号包裹;

    • 后缀名是xml

    • 有且仅有一个根标签

    • 标签嵌套不能交叉;

  • 注释

1
2
<!-- 注释  -->
如果有大量的转义字符,可以使用 CDATA区存;

xml文件演示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?xml version="1.0" encoding="utf-8" ?>
<!-- 这是注释 -->
<abcd>
<aaa>
<b>

</b>
<b name ="嘿嘿">
&lt;为所欲为 &gt;
</b>

<![CDATA[
<水浒传>
<红楼梦>
<<<
>>>
'
""

]]>
<bbb id="345" />
</aaa>
<b>


</b>
</abcd>

xml解析

利用dom4j工具完成;

使用步骤

  • 创建解析器

  • 获取根

  • 利用根对象,获取里面的所有字标签的集合

  • 遍历集合即可获取每个子标签

  • 面向每个字标签对象继续获取里面的属性,子标签的子标签,值等;

参考代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?xml version="1.0" encoding="utf-8" ?>
<!-- 这是注释 -->
<stus>
<student id="1">
<name>张三</name>
<age>18</age>
</student>
<student id="2">
<name>李四</name>
<age>19</age>
</student>
</stus>
/*
使用dom4j解析xml文本文件
*/
public class xmlParse {
public static void main(String[] args) throws Exception {
// 1, 利用空参数的构造方法, 创建一个解析器对象
SAXReader reader = new SAXReader();
// 2, 把整个xml读取成一个文档对象
Document d = reader.read("C:\\Users\\admin\\Desktop\\opt\\Java\\day11\\files\\stu.xml");
// 3, 整个文档中,一定只有一个根,直接从文档对象中,获取根即可
Element root = d.getRootElement();
// 4, 获取根下面的所有子标签
List<Element> stus = root.elements();
// 5, 遍历集合,就可以获取到每一个具体的标签对象(Student标签
for (Element stu : stus) {
// 5.1 面向每隔student标签对象,可以获取属性,也可以获取里面所有的子标签
String id = stu.attribute("id").getValue();
System.out.println("id" + id);
// 5.2 解析elem 标签对象 的子标签(各个学生属性
List<Element> prop = stu.elements();
// 5.3 遍历prop获取每隔具体的标签对象(name,age
for (Element name_age : prop) {
// 直接获取文本内容解渴
String text = name_age.getText();
// 获取标签的名称
String name = name_age.getName();
System.out.println(name + "标签下的内容是" + text);
}
}
}
}

约束

概述

  • 定义:可以对xml文件的内容进行限制的技术;

  • 作用

    • dtd文件,可以对xml文件的内容进行粗粒度的限制;
    • xsd文件可以对xml文件的内容进行细粒度的限制;
  • 分类

    • dtd约束,老的约束,粒度粗;

    • schema约束,新的约束技术,粒度细致;

语法

image-20230528144034307

image-20230528144105130

xml和约束文件的引入方式

dtd引入:

1
<!DOCTYPE 书架 SYSTEM "data.dtd">

xsd引入:

1
2
3
<书架 xmlns="http://www.itcast.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.itcast.cn data.xsd">

xml的内容,按照约束的提示写即可;