JavaEE 初阶篇-深入了解特殊文件(Properties 属性文件、XML)

🔥博客主页: 【小扳_-CSDN博客】
❤感谢大家点赞👍收藏⭐评论✍

文章目录

        1.0 Properties 属性文件概述

        1.1 Properties 属性文件特性与作用

        1.2 使用 Properties 把键值对数据写出到属性文件中

        1.3 使用 Properties 读取属性文件里的键值对数据

        2.0 XML 概述

        2.1 XML 的特点

        2.2 XML 的作用和应用场景

        2.3 将 dom4j.jar 下载并导入项目

        2.4 解析 XML 文件


        1.0 Properties 属性文件概述

        Properties 属性文件是Java中一种常见的配置文件,用于存储键值对。它通常以“.properties”为后缀,采用“key=value”的格式来存储数据,其中“key”表示属性名,而“value”表示属性值。

        1.1 Properties 属性文件特性与作用

特性:

        1)以键值对的方式存储数据或者数据关系。

        2)键不能重复出现。

        3)属性文件一般会以“.properties”作为后缀。

作用:

        存储有键值对关系的数据,比如:用户与密码等。

        1.2 使用 Properties 把键值对数据写出到属性文件中

构造器:

        public Properties():用于构建 Properties 集合对象(空容器)

常用的方法:

        1)public Object setProperties(String key,String value):保存键值对数据到 Properties 对象中去。简单来说,先把数据存放在容器中。

        2)public void store(OutputStream os,String comments):把键值对数据,通过字节输出流写到属性文件里去。comments 这个参数是写备注信息。简单来说,将容器中的数据再通过字节输出流写到属性文件中。

        3)public void store(Writer w,String comments):把键值对数据,通过字符输出流写到属性文件里去。comments 这个参数是写备注信息。简单来说,将容器中的数据再通过字符输出流写到属性文件中。

代码演示:

import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;

public class demo {
    public static void main(String[] args) throws IOException {
        //先创建好 Properties 容器
        Properties properties = new Properties();
        //再通过setProperty方法先将数据写到容器中
        properties.setProperty("用户","密码");
        properties.setProperty("小明","123");
        properties.setProperty("小板","456");
        properties.setProperty("小童","789");
        //接着通过store方法将容器里的内容写到属性文件中
        properties.store(new FileWriter("D:\\software\\code\\2023_java\\2023_java_code\\code_24_4_29\\src\\MyProperties\\text.properties"),"这是一个注释");
        
    }
}

运行结果:

        1.3 使用 Properties 读取属性文件里的键值对数据

构造器:

        public Properties():用于构建 Properties 集合对象(空容器)

常用的方法:

        1)public void load(InputStream is):通过字节输入流,读取属性文件里的键值对数据。简单来说,将文件中的内容通过字节流输入到 Properties 容器中。

        2)public void load(Reader reader):通过字符输入流,读取属性文件里的键值对数据。简单来说,将文件中的内容通过字符流输入到 Properties 容器中。

        3)public String getProperty(String key):根据键获取值(其实就是 get 方法的效果)。简单来说,从 Properties 容器中根据键来获取相对应的值。

        4)public Set<String> stringPropertyNames():获取全部键的集合(其实就是 keySet 方法的效果)。

代码演示:

import java.io.FileReader;;
import java.util.Properties;
import java.util.Set;

public class demo2 {
    public static void main(String[] args) throws Exception {
        //先创建一个容器 Properties
        Properties properties = new Properties();
        //接着通过load方法将文件中的数据写到容器里
        properties.load(new FileReader("D:\\software\\code\\2023_java\\2023_java_code\\code_24_4_29\\src\\MyProperties\\text.properties"));
        //再把容器中的数据读取出来
        //根据一个键来获取一个值的方式
        String value = properties.getProperty("小明");
        System.out.println(value);
        String value1 = properties.getProperty("小板");
        System.out.println(value1);
        String value2 = properties.getProperty("小童");
        System.out.println(value2);
        System.out.println("======================");

        //获取全部键
        Set<String> set = properties.stringPropertyNames();
        for (String s : set) {
            System.out.println(s + " :" + properties.getProperty(s));
        }
    }
}

运行结果:

        2.0 XML 概述

        XML 可扩展标记语言,是一种用于存储和传输数据的标记语言。XML 被设计用来传输和存储数据,同时具有自我描述性和可扩展性的特点。XML 的语法规则比较严格,它使用标签来标记数据,标签可以自定义,从而使 XML 具有很强的灵活性。

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

        2.1 XML 的特点

        1)XML 中的 <标签名> 称为一个标签或一个元素,一般是成对出现的。

        2)XML 中的标签名可以自己定义(可扩展),但必须要正确的嵌套。

        3)XML 中只能由一个根标签。

        4)XML 中的标签可以有多个属性。

        5)如果一个文件中放置的是 XML 格式的数据,这个文件就是 XML 文件,后缀一般要写成 .xml 。

        6)抬头声明必须有且必须放在第一行。


<?xml version="1.0" encoding="utf-8" ?>
<!-- 以上为抬头声明,抬头声明必须有,且必须放在第一行 -->

举个 XML 例子:

<?xml version="1.0" encoding="utf-8" ?>
<!-- 以上为用户信息 -->
<users>
    <user id="1">
        <name>张三</name>
        <age>19</age>
        <地址>学校</地址>
        <data>99</data>
    </user>
    <user id="2">
        <name>李四</name>
        <age>20</age>
        <地址>学校</地址>
        <data>90</data>
    </user>
    <user id="3">
        <name>王五</name>
        <age>18</age>
        <地址>学校</地址>
        <data>89</data>
    </user>

</users>

补充:

        1)XML 中可以定义注释信息:<!-- 注释内容 -->

        2)XML 中书写 "<"、"&" 等,可能会出现冲突,导致报错,此时可以用如下特殊字符替代。

        3)XML 中可以写一个叫 CDATA 的数据区:

<![CDATA[...内容...]]>

        里面的内容随便写。

        2.2 XML 的作用和应用场景

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

        经常用来做为系统的配置文件,或者作为一种特殊的数据结构,在网络中进行传输。

        2.3 将 dom4j.jar 下载并导入项目

        使用程序来读取 XML 文件中的内容。需要用到解析 XML 的框架,如:Dom4j(第三方研发的开源的框架)。

        1)接下来先下载 Dom4j 。通过该网址  Maven Repository: Search/Browse/Explore (mvnrepository.com) ,进去搜索 Dom4j 。

        完成这个流程就已经将 Dom4j.jar 下载到本地上了。

        2)接着需要将该 Dom4j.jar 导入到项目中

1.复制粘贴到工程目录下

2.接着将该 dom4j.jar 添加为库

        完成以上流程,就已经成功将 dom4j.jar 导入到项目中了。

        2.4 解析 XML 文件

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

构造器:

        public SAXReader():构建 Dom4j 的解析器对象。

常用方法:

        1)public Document read(String url):把 XML 文件读成 Document 对象。

        2)public Document read(InputStream is):通过字节输入流读取 XML 文件。

        3)Element getRootElement():获得根元素对象。

(2)Document

常用的方法:

        1)public String getName():获得元素名字。

        2)public List<Element> elements():获得当前元素下所有子元素。

        3)public List<Element> elements(String name):获得当前元素下指定名字的子元素返回集合。

        4)public Element element(String name):获得当前元素下指定名字的子元素,如果有很多名字相同的返回第一个。

        5)public String attributeValue(String name):通过属性名直接得到属性值。

        6)public String elementText(子元素名):得到指定名称的子元素的文本。

        7)public String getText():得到文本。

代码演示:

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.util.List;

public class demo {
    public static void main(String[] args) throws DocumentException {
        //先创建解析器
        SAXReader saxReader = new SAXReader();
        //通过解析器的read方法,将XML进行解析为Document
        Document document = saxReader.read("D:\\software\\code\\2023_java\\2023_java_code\\code_24_4_29\\src\\MyXML\\text2.xml");

        //根据document对象先获取根元素对象
        Element rootElement = document.getRootElement();
        System.out.println("输出的是根元素的名字"+rootElement.getName());

        //根据根元素再通过无参elements()方法获取全部子元素对象
        List<Element> elementList = rootElement.elements();


        //进行遍历输出
        System.out.println("遍历输出子元素名字");
        for (Element element : elementList) {
            System.out.println(element.getName());
        }
        System.out.println("===============");

        //根据根元素通过有参elements(String name)方法获取指定名字的子元素对象
        System.out.println("遍历指定的子元素对象,输出该子元素的名字");
        List<Element> elementList1 = rootElement.elements("user");
        for (Element element : elementList1) {
            System.out.println(element.getName());
        }
        System.out.println("===============");

        //获取指定的元素,如果有同名,将会获取第一个user的Element对象
        Element element = rootElement.element("user");
        //再获取该对象的全部的属性,并将其输出属性名与属性值
        List<Attribute> attributeList = element.attributes();
        for (Attribute attribute : attributeList) {
            System.out.println(attribute.getName() + " :" +attribute.getValue());
        }
        System.out.println("===============");

        //通过element元素来获取子元素的文本
        String name = element.elementText("name");
        String  age = element.elementText("age");
        String  address = element.elementText("地址");
        System.out.println(name + " ," + age + " ," + address);
        System.out.println("===============");

        //通过element获取下的子元素
        Element elementName = element.element("name");
        //再来输出文本
        String name1 = elementName.getText();
        System.out.println(name1);
    }
}

运行结果:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《动手学深度学习(Pytorch版)》Task03:线性神经网络——4.29打卡

《动手学深度学习&#xff08;Pytorch版&#xff09;》Task03&#xff1a;线性神经网络 线性回归基本元素线性模型损失函数随机梯度下降 正态分布与平方损失 线性回归的从零开始实现读取数据集初始化模型参数定义模型定义损失函数定义优化算法训练 线性回归的简洁实现读取数据集…

c#创建新项目

确保已安装.NET Core SDK。&#xff08;visual studio installer中可安装&#xff09; cmd中先引用到文件夹目录下。 mkdir MyConsoleApp MyConsoleApp是项目文件夹的名字。 mkdir 是一个命令行工具&#xff0c;用于在文件系统中创建新的目录&#xff08;文件夹&#xff09;…

用OpenCV先去除边框线,以提升OCR准确率

在OpenCV的魔力下&#xff0c;我们如魔法师般巧妙地抹去表格的边框线&#xff0c;让文字如诗如画地跃然纸上。 首先&#xff0c;我们挥动魔杖&#xff0c;将五彩斑斓的图像转化为单一的灰度世界&#xff0c;如同将一幅绚丽的油画化为水墨画&#xff0c;通过cv2.cvtColor()函数的…

主机ping不通虚拟机/虚拟机ping不通主机/xhell连接不了虚拟机/win10或win11系统升级导致无法连接到虚拟机

解决方案 重置网卡 找虚拟机ip&#xff0c;第二个inet对应的就是虚拟机ip地址 xshell连接 参考: 主机ping不通虚拟机

认识认识DHCP

文章目录 认识认识DHCP一、什么是DHCP&#xff1f;1.1、为什么要使用DHCP&#xff1f;1.2、DHCP是怎么工作的&#xff1f;1.2.1、客户端首次接入网络的工作原理1.2.2、客户端重用曾经使用过的地址的工作原理1.2.3、客户端更新租期的工作原理 二、配置DHCP Server&#xff0c;为…

电子式汽车机油压力传感器的接线方法及特点

电子式机油压力传感器由厚膜压力传感器芯片、信号处理电路、外壳、固定电路板装置和两根引线&#xff08;信号线和报警线&#xff09;组成。信号处理电路由电源电路、传感器补偿电路、调零电路、电压放大电路、电流放大电路、滤波电路和报警电路组成。 厚膜压力传感器是20世纪…

【UE5】动态播放媒体

最近项目中有一个需求&#xff0c;需要将场景中的42块屏幕都显示媒体内容&#xff0c;想着如果每一块屏幕都创建一个MediaPlayer资产、一个MediaSource资产、一个MediaTexture资产及创建对应的Material&#xff0c;就是4*42168个资产需要维护了&#xff0c;所以想着就全部采用动…

如何看待Agent AI智能体的未来

Agent AI智能体的未来 Agent AI智能体&#xff0c;也称为自主代理或智能代理&#xff0c;是指能够自主执行任务、与环境交互并作出决策的计算机程序或系统。这些智能体通常具备学习、适应和推理的能力&#xff0c;能够在复杂和不确定的环境中执行任务。随着技术的进步&#xf…

【OC和红移的双面材质】

OC和红移的双面材质 2021-12-23 18:36 rs oc 评论(0)

TiDB 利用binlog 恢复-反解析binlog

我们知道TiDB的binlog记录了所有已经执行成功的dml语句&#xff0c;类似mysql binlog row模式 &#xff0c;TiDB官方也提供了reparo可以进行解析binlog&#xff0c;如下所示: [2024/04/26 20:58:02.136 08:00] [INFO] [config.go:153] ["Parsed start TSO"] [ts449…

Linux网络抓包工具tcpdump是如何实现抓包的,在哪个位置抓包的?

Linux网络抓包工具tcpdump是如何实现抓包的&#xff0c;在哪个位置抓包的&#xff1f; 1. tcpdump抓包架构2. BPF介绍3. 从内核层面看tcpdump抓包流程3.1. 创建socket套接字3.2. 挂载BPF程序 4. 网络收包抓取5. 网络发包抓取6. 疑问和思考6.1 tcpdump抓包跟网卡、内核之间的顺序…

golang beego结合wire依赖注入及自动路由

1 安装wire 1.1 通过命令直接安装 go install github.com/google/wire/cmd/wirelatest 1.2 通过go get方式安装 go get github.com/google/wire/cmd/wire进入目录编译 cd C:\Users\leell\go\pkg\mod\github.com\google\wirev0.6.0\cmd\wire go build 然后将wire.exe移动到…

C++中list的使用

文章目录 一、 list简介二、 构造函数1. 默认构造函数2. 拷贝构造3. 迭代器区间初始化4. 插入n个值为x的数据5. 代码示例 三、 容量和元素访问1. empty()2. size()3. max_size()3. back()4. front()5. 代码示例 四、 增删查改1. push_back()2. push_front()3. emplace_back()4.…

设计模式之装饰者模式DecoratorPattern(四)

一、模板模式介绍 模板方法模式&#xff08;Template Method Pattern&#xff09;&#xff0c;又叫模板模式&#xff08;Template Pattern&#xff09;&#xff0c; 在一个抽象类公开定义了执行它的方法的模板。它的子类可以更需要重写方法实现&#xff0c;但可以成为典型类中…

d16(149-153)-勇敢开始Java,咖啡拯救人生

跳过了p151 四小时的讲题我不敢听&#xff1a;) Stream Stream流&#xff0c;是JDK8后新增的API&#xff0c;可以用于操作集合或者数组的数据 优势&#xff1a;大量结合了Lambda的语法风格&#xff0c;该方式更强大更简单&#xff0c;代码简洁&#xff0c;可读性好 常用方法 …

Mycat(三)读写分离双主双从

文章目录 搭建双主双从双主机配置双从机配置双从配置两个主机互相复制停止从服务复制功能重新配置主从 修改 Mycat 的集群配置实现多种主从双主双从集群角色划分增加两个数据源修改集群配置文件读写分离配置扩展&#xff08;1&#xff09;读写分离(一主一从,无备)(m是主,s是从)…

Grafana页面嵌入自建Web应用页面

目录 一、应用场景 二、实现方式 1、修改Grafana配置文件 2、获取监控页面url 3、隐藏左侧和顶部菜单 一、应用场景 需要将Grafana监控页面嵌入自建Web应用页面&#xff0c;使Grafana监控页面成为自建Web应用的一部分。 二、实现方式 总体思路&#xff1a;修改Grafana配…

刷机维修进阶教程-----红米note7 修复基带 更改参数 nv损坏故障 实例步骤操作解析

在前面的博文中我有说过。不管刷更改参数还是修复基带,尽可能的情况下备份一些主要分区,上期讲了小米6x 小米5 小米6这些机型更改参数的具体步骤。今天的教程以红米note7为例解析下改参数和修复nv损坏的具体步骤,两者操作实际没有什么冲突。有兴趣的友友建议多看下我关于…

10G MAC层设计系列-(2)MAC RX模块

一、概述 MAC RX模块的需要进行解码、对齐、CRC校验。 因为在空闲的时候10G PCS/PMA会一直向外吐空闲符&#xff08;x07&#xff09;所以需要根据开始符、结束符将有效数据从码流中截取&#xff0c;也就是解码。 因为开始字符的所在位置有两种形式&#xff0c;而结束字符的位…

大数据学习笔记14-Hive基础2

一、数据字段类型 数据类型 &#xff1a;LanguageManual Types - Apache Hive - Apache Software Foundation 基本数据类型 数值相关类型 整数 tinyint smallint int bigint 小数 float double decimal 精度最高 日期类型 date 日期 timestamps 日期时间 字符串类型 s…