23-properties文件和xml文件以及dom4j的基本使用操作

news2024/11/24 22:58:04

特殊文件

我们利用这些特殊文件来存放我们 java 中的数据信息,当数据量比较大的时候,我们可以利用这个文件对数据进行快速的赋值

image-20230809093854114

对于多个用户数据的存储的时候我们要用这个XML来进行存储

image-20230809094035375
关于这些特殊文件,我们主要学什么

  1. 了解他们的特点,作用
  2. 学习使用程序读取他们里面的数据
  3. 学习使用程序把数据存储到这些文件里

Properties属性文件

了解它们的特点、作用
学习使用程序读取它们里面的数据
学习使用程序把数据存储到这些文件里
image-20230809094756767

是一个Map集合(键值对集合),但是我们一般不会当集合使用。
核心作用:Properties是用来代表属性文件的,通过Properties可以读写属性文件里的内容。
使用Properties读取属性文件里的键值对数据

构造器说明
public Properties()用于构建 Properties 集合对象(空容器)

我们首先要通过这个文件的字节或者字符输入流来读取这个属性文件中的数据。

常用方法说明
public void load(InputStream is)通过字节输入流,读取属性文件里的键值对数据
public void load(Reader reader)通过字符输入流,读取属性文件里的键值对数据
public String getProperty(String key)根据键获取值(其实就是get方法的效果)
public Set<String> stringPropertyNames()获取全部键的集合(其实就是 ketSet 方法的效果)

其实它本质作用就是我们用来读取文件中的等号两边的元素
其本质是一个map集合
文件内容,好像中文格式不兼容?

admin=123456
张无忌=minmin
sadf=wuji
asfdaf=wuji
public static void main(String[] args) throws IOException {        // 创建这个特殊文件
        Properties pt = new Properties();
        System.out.println(pt); //输出为空
        pt.load(new FileReader("LearnJavaSE\\Learn\\src\\Metamorphosis\\day4\\SpecialFile\\p.properties"));
        System.out.println(pt);
        System.out.println(pt.getProperty("admin")); //根据键的值来读取数据.

常用方法说明
public Object setProperty(String key, String value)保存键值对数据到Properties对象中去。
public void store(OutputStream os, String comments)把键值对数据,通过字节输出流写出到属性文件里去
public void store(Writer w, String comments)把键值对数据,通过字符输出流写出到属性文件里去
属性文件并不是后缀是properties才是属性文件
只要满足键值对的书写格式,那么 txt 也是属性文件
	// 创建这个特殊文件
	Properties pt = new Properties();
	System.out.println(pt); // 输出为空
	pt.load(new FileReader("LearnJavaSE\\Learn\\src\\Metamorphosis\\day4\\SpecialFile\\test.txt"));
	System.out.println(pt);
	System.out.println(pt.getProperty("admin")); // 根据键的值来读取数据.

XML文件

本质是一种数据的格式,可以用来存储复杂的数据结构,和数据关系。
XML的特点

  1. XML中的“<标签名>” 称为一个标签或一个元素,一般是成对出现的。
  2. XML中的标签名可以自己定义(可扩展),但必须要正确的嵌套。
  3. XML中只能有一个根标签。
  4. XML中的标签可以有属性。
  5. 如果一个文件中放置的是XML格式的数据,这个文件就是XML文件,后缀一般要写成.xml。
    和HTML文件,惊人的类似

XML的创建

就是创建一个 XML 类型的文件,要求文件的后缀必须使用 xml,如 hello_world.xml, 这一点和这个 properties 文件不太一样,properties 只需要内容的格式满足条件就可以了, 其他的要求不高的
开头文件的格式必须这样写,必须放在第一行

<?xml version="1.0" encoding="UTF-8" ?>version:XML默认的版本号码、该属性是必须存在的encoding:本XML文件的编码

XML文件中的特殊符号

XML 中可以定义注释信息: 这个和这个 html 文件是一样的.
XML中书写”<”、“&”等,可能会出现冲突,导致报错,此时可以用如下特殊字符替代。

`	&lt;    <  小于
    &gt;    >  大于
    &amp;   &  和号
    &apos;  '  单引号
    &quot;  "  引号
XML中可以写一个叫CDATA的数据区: <![CDATA[   …内容…  ]]>,里面的内容可以随便写。**此时的小于号还有大于号就不用再用特殊符号了**

<?xml version="1.0" encoding="utf-8" ?>
<users>
    <use id="1">
        <name>张无忌</name>
        <sex></sex>
    </use>
    <use id="2">
        <name>任盈盈</name>
        <sex></sex>
    </use>
</users>

作用

本质是一种数据格式,可以存储复杂的数据结构,和数据关系。
应用场景:经常用来做为系统的配置文件;或者作为一种特殊的数据结构,在网络中进行传输。

image-20230809104711348

XML文件的解析

注意:程序员并不需要自己写原始的IO流代码来解析XML,难度较大!也相当繁琐!
其实,有很多开源的,好用的,解析XML的框架,最知名的是:Dom4j(第三方研发的)

image-20230809105351220

SAXReader:Dom4j 提供的解析器,可以认为是代表整个 Dom4j 框架

构造器/方法说明
public SAXReader()构建Dom4J的解析器对象
public Document read(String url)把XML文件读成Document对象
public Document read(InputStream is)通过字节输入流读取XML文件
使用方法
SAXReader sr = new SAXReader();
Document doc = sr.read("LearnJavaSE\\Learn\\src\\Metamorphosis\\day4\\SpecialFile\\xmlTest.xml");
Document doc2 = sr.read(new FileReader("LearnJavaSE\\Learn\\src\\Metamorphosis\\day4\\SpecialFile\\xmlTest.xml"));
方法名说明
Element getRootElement()获得根元素对象
获取根节点,根节点是这个 xml 分析的开始,任何 xml 分析工作都要从这个根开始
Element root = doc.getRootElement();  

注意这个文件名字不能有中文

解析的核心操作
方法名说明
public String getName()得到元素名字
public List<Element> elements()得到当前元素下所有子元素
public List<Element> elements(String name)得到当前元素下指定名字的子元素返回集合
public Element element(String name)得到当前元素下指定名字的子元素,如果有很多名字相同的返回第一个
public String attributeValue(String name)通过属性名直接得到属性值
public String elementText(子元素名)得到指定名称的子元素的文本
public String getText()得到文本

xml 的基本操作如下

<?xml version="1.0" encoding="utf-8" ?>
<users>
    <use id="1">
        <name>张无忌</name>
        <sex></sex>
    </use>
    <use id="2">
        <name>任盈盈</name>
        <sex></sex>
    </use>
</users>

        // 我们首先要读取这个xml文件
        SAXReader sr = new SAXReader();
        Document doc = sr.read("LearnJavaSE\\Learn\\src\\Metamorphosis\\day4\\SpecialFile\\xmlTest.xml");
        // Document doc2 = sr.read(new
        // FileReader("LearnJavaSE\\Learn\\src\\Metamorphosis\\day4\\SpecialFile\\xmlTest.xml"));
        Element root = doc.getRootElement();
        System.out.println(root.getName()); // 根节点名称
        List<Element> elements = root.elements();
        for (Element elements2 : elements) {
            System.out.println(elements2.getName()); // 根节点下的节点名,只能是一层,第二层的节点名比如说这个name和sex是无法读取的
            //根据属性名来获取这个id对象的值
            System.out.println(elements2.attributeValue("id"));
            // 获取这个use类中的名称为name的所有子元素,并返回集合,然后可以读取这个text文本了
            List<Element> elements3 = elements2.elements("name");
            for (Element elements32 : elements3) {
                System.out.println(elements32.getText());
            }
            

得到当前元素下指定名字的子元素,如果有很多名字相同的返回第一个

        Element people = rootElement.element("people");
        System.out.println(people.getText());

把程序中的数据写入到XML文件中

        StringBuilder sb = new StringBuilder();
        sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n");
        sb.append("<book>\r\n");
        sb.append("<name>").append("从入门到跑路").append("</name>\r\n");
        sb.append("<author>").append("dlei").append("</author>\r\n");
        sb.append("<name>").append("从入门到跑路").append("</name>\r\n");
        sb.append("</book>");

        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("src/day5/newtest.xml"));
        bufferedWriter.write(sb.toString());
        bufferedWriter.close();

我们如果不用这个 dom4库来进行写,我们还可以通过这个 IO 流的读写方式来进行读写,但是没有必要,用别人封装好的就行,java 只需要 nb 就是因为这些别人封装好的库,这些库使得大多数的 java 操作变得简单了

约束XML文件的书写

顾名思义就是限制 XML 文件只能按照某种格式进行书写。
专门用来限制xml书写格式的文档,比如:限制标签、属性应该怎么写。

约束文档的分类

DTD文档
Schema文档

XML文档约束-DTD的使用(了解)

需求:利用DTD约束文档,约束一个XML文件的编写。
①:编写DTD约束文档,后缀必须是.dtd

<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>

可以约束XML文件的编写
不能约束具体的数据类型
②:在需要编写的XML文件中导入该DTD约束文档
③:然后XML文件,就必须按照DTD约束文档指定的格式进行编写,否则报错!

<!ELEMENT 书架 (书+)>  //表示这个根元素是书架,然后根元素的子元素是书,+加号表示不止只有一个子元素
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>  //子元素的子元素
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE 书架 SYSTEM "data.dtd">
<书架>
    <>
        <书名>从入门到删库</书名>
        <作者>小猫</作者>
        <售价>很便宜</售价>
    </>
    <>
        <书名>从入门到删库</书名>
        <作者>小猫</作者>
        <售价>9.9</售价>
    </>
    <>
        <书名>从入门到删库</书名>
        <作者>小猫</作者>
        <售价>9.9</售价>
    </>
</书架>

XML文档约束-schema的使用(了解)

可以约束XML文件的编写、和数据类型
需求:利用schema文档约束,约束一个XML文件的编写。
①:编写schema约束文档,后缀必须是.xsd,具体的形式到代码中观看。
②:在需要编写的XML文件中导入该schema约束文档
③:按照约束内容编写XML文件的标签。

<?xml version="1.0" encoding="UTF-8" ?>
//xmln后面的网址表示这个xsd文档本身也是受到别人约束的
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.itcast.cn" 
        elementFormDefault="qualified" >      //这个不用管,直接把这个复制到xsd文档开头就行了.
    <!-- targetNamespace:申明约束文档的地址(命名空间)-->
    <element name='书架'>
        <!-- 写子元素 -->
        <complexType>
            <!-- maxOccurs='unbounded': 书架下的子元素可以有任意多个!-->
            <sequence maxOccurs='unbounded'>
                <element name=''>
                    <!-- 写子元素 -->
                    <complexType>
                        <sequence>
                            <element name='书名' type='string'/>
                            <element name='作者' type='string'/>
                            <element name='售价' type='double'/>
                        </sequence>
                    </complexType>
                </element>
            </sequence>
        </complexType>
    </element>
</schema>
<?xml version="1.0" encoding="UTF-8" ?>
<书架 xmlns="http://www.itcast.cn"		//声明一个包名,和xsd的里面的那个targetNamespace中的内容一样
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://www.itcast.cn data.xsd">
    <!-- xmlns="http://www.itcast.cn"  基本位置
         xsi:schemaLocation="http://www.itcast.cn books02.xsd" 具体的位置 -->
   <>
       <书名>从入门到删除</书名>
       <作者>dlei</作者>
       <售价>9.9</售价>
   </>
    <>
        <书名>从入门到删除</书名>
        <作者>dlei</作者>
        <售价>0.9</售价>
    </>
</书架>

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

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

相关文章

Linux系统编程基础:进程控制

文章目录 一.子进程的创建操作系统内核视角下的父子进程存在形式验证子进程对父进程数据的写时拷贝 二.进程等待进程非阻塞等待示例: 三.进程替换内核视角下的进程替换过程:综合利用进程控制系统接口实现简单的shell进程 进程控制主要分为三个方面,分别是:子进程的创建,进程等待…

windows修改键位F11变insert(改键盘映射)

这里是通过改变windows的注册表来实现的 1.按住winr打开运行&#xff0c;在运行中输入“regedit”&#xff0c;再点击“确定”按钮。如下图 2.找到注册表的目录 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout 3.在Keyboard Layout右击新建 -> 二进…

18scala笔记

Scala2.12 视频地址 1 入门 1.1 发展历史 … 1.2 Scala 和 Java Scala Java 编写代码使用scalac编译成.class字节码文件scala .class文件 执行代码 1.3 特点 1.4 安装 视频地址 注意配置好环境变量 简单代码 1.5 编译文件 编译scala文件会产生两个.class文件 使用java…

OpenGLES:绘制一个颜色渐变、旋转的3D立方体

一.概述 之前关于OpenGLES实战开发的博文&#xff0c;不论是实现相机滤镜还是绘制图形&#xff0c;都是在2D纬度 这篇博文开始&#xff0c;将会使用OpenGLES进入3D世界 本篇博文会实现一个颜色渐变、旋转的3D立方体 动态3D图形的绘制&#xff0c;需要具备一些基础的线性代数…

mysql面试题8:MySQL的日志有哪些?MySQL的bin log、redo log、undo log区别和联系

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:MySQL的日志有哪些? MySQL的日志有以下几种,以及查看这些日志的命令和操作步骤如下: 错误日志(Error Log): 查看错误日志的命令:SHOW VARI…

2023.10.01-winxpsp3绿色安装jdk1.8

参考: 如何在XP系统配置java8(jdk8)环境 - 简书 jdk-8u381-windows-i586.exe jdk-8u202-windows-i586.exe 实验了一下,8u381不支持winxp xp3 下载地址: https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.htmlhttps://download.oracle.com/otn/ja…

基于Java的电影院购票系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

Strategy

Strategy 动机 在软件构建过程中&#xff0c;某些对象使用的算法可能多种多样&#xff0c;经常改变&#xff0c;如果将这些算法都编码到对象中&#xff0c;将会使对象变得异常复杂&#xff1b; 而且有时候支持不使用的算法也是一个性能负担。如何在运行时根据需要透明地更改对…

buuctf-[WUSTCTF2020]颜值成绩查询

打开环境&#xff0c;随便输个1看看 输个2 发现功能就是输入一个学号&#xff0c;然后返回对应的成绩&#xff0c;就是一个简单的查询操作。 当输入的学号不存在时&#xff0c;只会返回“student number not exists.”。 猜测是盲注题&#xff0c;因为看不见其他的回显信息&a…

计算机毕业设计 基于SSM的民宿推荐系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

【iptables 实战】05 iptables设置网络转发实验

一、网络架构 实验效果&#xff0c;通过机器B的转发功能&#xff0c;将机器A的报文转发到机器C 本实验准备三台机器分别配置如下网络 机器A ip:192.168.56.104 机器C ip:10.1.0.10 机器B 两张网卡&#xff0c;分别的ip是192.168.56.106和10.1.0.11 如图所示 如下图所示 二、…

软件安全需求分析

一、实验目的 熟悉软件安全需求分析方法&#xff0c;掌握软件安全分析技术。 二、实验软硬件要求 1、操作系统&#xff1a;windows 7/8/10等 三、实验预习 《软件安全技术》教材第6章 四、实验内容&#xff08;实验步骤、测试数据等&#xff09; 1. 目标&#xff1a;完成一…

10个与AI相关的技术领域

**10个与AI相关的技术领域** 除了与各个科学领域相关的具体挑战之外&#xff0c;AI在科学领域还存在一些共同的技术挑战。特别是&#xff0c;我们确定了以下四个共同的技术挑战&#xff1a;超出分布的泛化、可解释性、由自监督学习提供支持的基础模型和不确定性量化。尽管这些…

SpringBoot Validation入参校验国际化

在 Spring Boot 中&#xff0c;可以使用 Validation 和国际化来实现对入参的校验。 常用的校验 NotNull验证字段值不能为 nullNotEmpty验证字段值不能为 null 或空字符串NotBlank验证字符串字段值不能为空、null&#xff0c;并且必须至少包含一个非空白字符Size验证字符串、…

【PickerView案例12-info_plist-PCH文件介绍 Objective-C语言】

一、给大家介绍一下我们项目的一些文件: 1.这个呢,是项目的基础文件: 一些类啊: 一些图片啊: 还有加载图片, 最主要,就是这个东西:info.plist:文件 info.plist: 2.那,需要大家了解一点,关于它的历史啊: 我们现在用的时候,都是从xcode6.4开始的, 或者说,直…

【Shiro】SpringBoot集成Shiro权限认证《下》

本章节是在上一节的基础上继续完成&#xff0c;如有不明白&#xff0c;请看上一篇文章【Shiro】SpringBoot集成Shiro权限认证《上》。 SQL语句 这里我们需要先准备好SQL语句,如下所示&#xff1a; /* Navicat MySQL Data TransferSource Server : local Source Serv…

美丽的图论

**美丽的图论 ** Prf &#x1f609; 对于 n 个顶点上的树的数量 n^(n-2)&#xff0c;这是凯莱公式&#xff0c;用于计算 n 个顶点上的树的数量&#xff0c;被放置在一个由 4 个标记顶点组成的圆圈中。 使用 Figma 制作 在图论中&#xff0c;树只是一个没有环的图。 树在离散…

Python机器学习-灵敏度分析

文章目录 灵敏度分析详细步骤单参数分析 灵敏度分析详细步骤 灵敏度分析是一种用于确定输入参数变化对模型输出结果的影响程度的方法。以下是进行灵敏度分析的一般步骤&#xff1a; 确定模型&#xff1a;选择需要进行灵敏度分析的模型&#xff0c;该模型必须具有可变参数和可…

算法框架-LLM-1-Prompt设计(一)

原文&#xff1a;算法框架-LLM-1-Prompt设计&#xff08;一&#xff09; - 知乎 目录 收起 1 prompt-engineering-for-developers 1.1 Prompt Engineering 1.1.1 提示原则 1. openai的环境 2. 两个基本原则 3. 示例 eg.1 eg.2 结构化输出 eg.3 模型检验 eg.4 提供示…

OpenCV实现视频的读取、显示、保存

目录 1&#xff0c;从文件中读取视频并播放 1.2代码实现 1.3效果展示 2&#xff0c;保存视频 2.1 代码实现 2.2 结果展示 1&#xff0c;从文件中读取视频并播放 在OpenCV中我们需要获取一个视频&#xff0c;需要创建一个VideoCapture对象,指定你要读取的视频文件&am…