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

特殊文件

我们利用这些特殊文件来存放我们 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.xdnf.cn/news/147680.html

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

相关文章

华为云云耀云服务器L实例评测 | 实例使用教学之软件安装:华为云云耀云服务器环境下安装 Docker

华为云云耀云服务器L实例评测 &#xff5c; 实例使用教学之软件安装&#xff1a;华为云云耀云服务器环境下安装 Docker 介绍华为云云耀云服务器 华为云云耀云服务器 &#xff08;目前已经全新升级为 华为云云耀云服务器L实例&#xff09; 华为云云耀云服务器是什么华为云云耀云…

想要精通算法和SQL的成长之路 - 验证二叉搜索树和不同的二叉搜索树

想要精通算法和SQL的成长之路 - 验证二叉搜索树和不同的二叉搜索树 前言一. 验证二叉搜索树二. 不同的二叉搜索树三. 不同的二叉搜索树II 前言 想要精通算法和SQL的成长之路 - 系列导航 二叉搜索树的定义&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树只包…

【前段基础入门之】=>CSS浮动

浮动的简介 在最初&#xff0c;浮动是用来实现文字环绕图片效果的&#xff0c;现在浮动是主流的页面布局方式之一。 元素浮动后的特点 &#x1f922; 脱离文档流。&#x1f60a; 不管浮动前是什么元素&#xff0c;浮动后&#xff1a;默认宽与高都是被内容撑开&#xff08;尽…

GRACE-FO L2产品的发布说明 - 版本UTCSR RL-06.1产品

数据更新日期&#xff1a;2023-5-11 0&#xff09;此说明取代了所有先前与UTCSR-RL06.1 GRACE-FO Level-2产品相关的旧版本发布说明。 1&#xff09;截止到本发布说明日期的GRACE-FO RL-06.1产品文件列表如下&#xff1a; 2&#xff09;通常情况下&#xff0c;每个日历月有四…

游戏逆向中的 NoClip 手段和安全应对方式

文章目录 墙壁边界寻找碰撞 NoClip 是一种典型的黑客行为&#xff0c;允许你穿过墙壁&#xff0c;所以 NoClip 又可以认为是避免碰撞体积的行为 墙壁边界 游戏中设置了碰撞体作为墙壁边界&#xff0c;是 玩家对象 和墙壁发生了碰撞&#xff0c;而不是 相机 玩家对象有他的 X…

从 0 到 1 ,手把手教你编写《消息队列》项目(Java实现) —— 核心类持久化存储

文章目录 一、持久化存储的方式与路径二、公共模块序列化 / 反序列化异常规定 三、持久化存储数据库数据管理文件数据管理读写规定新增 /删除规定内存中 Message 的规定存储规定代码编写 硬盘数据管理 一、持久化存储的方式与路径 交换机,队列,绑定关系,这些我们使用数据库来管…

警用装备管理系统|智装备DW-S304的主要功能

东识科技&#xff08;DONWIT&#xff09;警用装备管理系统DW-S304是依托互3D技术、云计算、大数据、RFID技术、数据库技术、AI、视频分析技术对RFID智能仓库进行统一管理、分析的信息化、智能化、规范化的系统。 在国外很早开始便使用警用装备管理系统对警用装备的管理使用进行…

Explain执行计划字段解释说明---select_type、table、patitions字段说明

1、select_type的类型有哪些 2、select_type的查询类型说明 1、SIMPLE 简单的 select 查询,查询中不包含子查询或者UNION 2、PRIMARY 查询中若包含任何复杂的子部分&#xff0c;最外层查询则被标记为Primary 3、DERIVED 在FROM列表中包含的子查询被标记为DERIVED(衍生)&…

基于ssm的互联网废品回收/基于web的废品资源利用系统

摘 要 本毕业设计的内容是设计并且实现一个基于SSM框架的互联网废品回收。它是在Windows下&#xff0c;以MYSQL为数据库开发平台&#xff0c;Tomcat网络信息服务作为应用服务器。互联网废品回收的功能已基本实现&#xff0c;主要包括用户、回收员、物品分类、回收物品、用户下单…

【Python 基础 2023 最新】第七课 Pandas

【Python 基础 2022 最新】第七课 Pandas 概述Pandas 是什么?Pandas 的应用场景安装 Pandas Pandas 数据结构Series 数组什么是 Series?Series 创建 Series 数组操作数据检索数据修改过滤Series 数组运算总结 什么是 DataFrameDataFrame 创建 DataFrame 操作数据检索筛选数据…

决策树C4.5算法的技术深度剖析、实战解读

目录 一、简介决策树&#xff08;Decision Tree&#xff09;例子&#xff1a; 信息熵&#xff08;Information Entropy&#xff09;与信息增益&#xff08;Information Gain&#xff09;例子&#xff1a; 信息增益比&#xff08;Gain Ratio&#xff09;例子&#xff1a; 二、算…

密码技术 (6) - 证书

一. 前言 前面介绍的公钥密码和数字签名&#xff0c;都无法解决一个问题&#xff0c;那就是判断自己获取的公钥是否期望的&#xff0c;不能确定公钥是否被中间攻击人掉包。所以&#xff0c;证书的作用是用来证明公钥是否合法的。本文介绍的证书就是解决证书的可靠性的技术。 二…

最新反编译小程序教程(支持分包一键反编译),反编译成功率高达99%

最新反编译小程序教程&#xff08;支持分包一键反编译&#xff09;&#xff0c;反编译成功率高达99% 优点&#xff1a; 1.支持多个分包以及主包一次性反编译&#xff1b; 2.使用wxappUnpacker无法进行解析的小程序包&#xff0c;一键反编译解析&#xff08;咱没有发现反编译失败…

使用ExLlamaV2在消费级GPU上运行Llama2 70B

Llama 2模型中最大也是最好的模型有700亿个参数。一个fp16参数的大小为2字节。加载Llama 270b需要140 GB内存(700亿* 2字节)。 只要我们的内存够大&#xff0c;我们就可以在CPU上运行上运行Llama 2 70B。但是CPU的推理速度非常的慢&#xff0c;虽然能够运行&#xff0c;速度我…

正点原子嵌入式linux驱动开发——TF-A移植

经过了之前的学习&#xff0c;除了TF-A的详细启动流程仍待更新&#xff0c;TF-A的使用和其对应的大致启动流程已经进行过了学习。但是当我们实际做产品时&#xff0c;硬件平台肯定会和ST官方的有区别&#xff0c;比如DDR容量会改变&#xff0c;自己的硬件没有使用到官方EVK开发…

[ruby on rails] postgres sql explain 优化

一、查看执行计划 sql User.all.to_sql # 不会实际执行查询 puts ActiveRecord::Base.connection.explain(sql)# 会实际执行查询&#xff0c;再列出计划 User.all.explain# 会实际执行查询&#xff0c;再列出计划 ActiveRecord::Base.connection.execute(EXPLAIN (ANALYZE, V…

EM聚类(下):用EM算法对王者荣耀英雄进行划分

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作&#xff0c;主要擅长领域有&#xff1a;爬虫、后端、大数据…

Vscode 如何创建java项目,并添加包

创建java项目 添加包 先打开这个资源管理器中的javaProject&#xff0c;然后打开这个javaProject&#xff0c;点击里面的Reference Libraries,然后点击加号 选择要添加的包然后进行确认即可

《C和指针》笔记30:函数声明数组参数、数组初始化方式和字符数组的初始化

文章目录 1. 函数声明数组参数2. 数组初始化方式2.1 静态初始化2.2 自动变量初始化 2.2 字符数组的初始化 1. 函数声明数组参数 下面两个函数原型是一样的&#xff1a; int strlen( char *string ); int strlen( char string[] );可以使用任何一种声明&#xff0c;但哪个“更…

小狐狸ChatGPT付费创作系统V2.0.4智能问答小程序,修复一个pc版的bug

狸GPT付费体验系统是一款基于ThinkPHP框架开发的AI问答小程序&#xff0c;是基于国外很火的ChatGPT进行开发的Ai智能问答小程序。 当前全民热议ChatGPT&#xff0c;流量超级大&#xff0c;引流不要太简单&#xff01;一键下单即可拥有自己的GPT&#xff01;无限多开、免费更新不…