【特殊文本文件——Properties和xml文件】

特殊文本文件

一、Properties

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

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

(1)构造器

  • public Properties():用于构建Properties

(2)常用方法

  • public void load(InputStream is):通过字节输入流,读取属性文件里的键值对数据
  • public void load(Reader reader):通过字符输入流,读取属性文件里的键值对数据
  • public String getProperty(String key):根据键获取值(其实就是get方法的效果)
  • public Set < String >stringPropertyNames():获取全部键的集合(其实就是ketSet方法的效果)
public class Demo01 {public static void main(String[] args) throws IOException {//创建Properties集合对象Properties prop = new Properties();//读取文件中的键值对数据prop.load(new FileReader("day11\\users.properties"));//获取所有键的集合(类似map的keySet方法)Set<String> keys = prop.stringPropertyNames();for (String key : keys) {//根据键获取值(类似map的get方法)String value = prop.getProperty(key);System.out.println(key + "," + value);}}
}

在这里插入图片描述
在这里插入图片描述

2.使用Properties把键值对数据写出到属性文件里去

  • public Object setProperty(String key,String value):保存键值对数据到Properties对象中去
  • public void store(OutputStream os,String comments):把键值对数据,通过字节输出流写出到属性文件中
  • public void store(Writer w,String comments):把键值对数据,通过字符输出流写到属性文件中
public class Demo02 {public static void main(String[] args) throws IOException {//创建Properties集合对象Properties p = new Properties();//存储键值对数据(类似map的put方法)p.setProperty("《红楼梦》","曹雪芹");p.setProperty("《水浒传》","施耐庵");p.setProperty("《西游记》","吴承恩");p.setProperty("《三国演义》","罗贯中");//public void store(Writer w/OutputStream os, String comments); 将键值对数据存入指定的文件,comments注释p.store(new FileWriter("day11\\books.properties"),"这是我的收藏书籍");}
}

在这里插入图片描述

二、XML文件

  • XML(可扩展的标记语言)是一种数据格式,能用来存储复杂的数据结构,由很多标签组成,而标签的名字是可以自定义的

1.特点

(1)xml中<标签名>成为一个标签或元素,必须成对出现

(2)xml中的标签可以自定义(可扩展),但必须正确的嵌套

(3)xml中只能有一对根标签

(4)xml中的标签可以自定义属性,属性和标签名用空格隔开,属性值必须用引号引起来

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

2.XML语法规则

  • xml文件文档声明必须在第一行
  • xml中可以定义注释信息:< !–注释内容 – >
  • xml中书写"<“、”&"等,可能会出现冲突导致报错,可以用特殊字符替代
  • xml文件中可以存在CDATA区,用来书写多个特殊字符:< ![CDATA[…内容…]]>

3.解析XML文件

(1)就是使用程序读取XML文件中的数据

(2)解析XML框架,最知名的是Dom4j(第三方)

(3)DOM(文档对象模型)解析思想:将文档的各个组成部分看做是对应的对象

(4)DOM4J准备工作

  • 将jar包拖入项目的lib文件夹下
  • 对着jar包右键,选择Add As Library
  • 创建DOM4J解析器对象,获取Document文档对象,getRootElement获取根标签

(5)一层一层解析

​ Dom4j解析XML得到Document对象

  • SAXReader:Dom4j提供的解析器

    • public SAXReader():构建Dom4J的解析器对象
    • public Document read(String url):把XML文件读成Document对象
  • Document:文档对象

    • Element getRootElement():获取根元素对象

(6)Element提供的方法

  • public String getName():得到元素名字
  • public List< Element > element():得到当前元素下的所有子元素
  • public List< Element > elements(String name):得到当前元素下指定名字的子元素返回集合
  • public Element Element (String name):得到当前元素下指定名字的子元素,如果有很多名字相同的返回第一个
  • public String attributeValue(String name):通过属性名直接得到属性值
  • public String elementText(子元素名):得到指定名称的子元素文本
  • public String getText():得到文本
public class Demo {public static void main(String[] args) throws DocumentException {//创建解析器对象SAXReader saxReader = new SAXReader();//获取文档对象Document document = saxReader.read("day11\\users.xml");//获取根标签Element rootElement = document.getRootElement();//获取所有指定名称的子标签List<Element> elements = rootElement.elements("user");//创建集合ArrayList<User> list = new ArrayList<>();//遍历集合,获取子标签for (Element element : elements) {//获取id属性String id = element.attribute("id").getValue();//获取name文本String name = element.element("name").getText();//获取password文本String password = element.element("password").getText();//获取address文本String address = element.element("address").getText();//获取password文本String gender = element.element("gender").getText();//封装User对象User user = new User(id,name,password,address,gender.charAt(0));//添加到集合list.add(user);}//验证for (User user : list) {System.out.println(user);}}
}//用户类
class User{private String id;private String name;private String password;private String address;private Character gender;public User() {}public User(String id, String name, String password, String address, Character gender) {this.id = id;this.name = name;this.password = password;this.address = address;this.gender = gender;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public Character getGender() {return gender;}public void setGender(Character gender) {this.gender = gender;}@Overridepublic String toString() {return "User{" +"id='" + id + '\'' +", name='" + name + '\'' +", password='" + password + '\'' +", address='" + address + '\'' +", gender=" + gender +'}';}
}

4.XML约束文档

(1)专门用来限制xml书写格式的文档,比如:限制标签,属性应该怎么写

(2)约束文档的分类

  • DTD文档,后缀必须是.dtd,例如book.dtd,在需要编写的XML文件中导入该DTD约束文档< !DOCTYPE bookshelf SYSTEM “book.dtd”>,然后XML文件就必须按照DTD约束文档指定的格式进行编写,否则报错

    可以约束XML文件的编写,不能约束具体的数据类型

  • Schema文档,后缀必须是.xsd,可以约束XML文件的编写和数据类型

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【个人博客系统网站】统一处理 · 拦截器

【JavaEE】进阶 个人博客系统&#xff08;2&#xff09; 文章目录 【JavaEE】进阶 个人博客系统&#xff08;2&#xff09;1. 统一返回格式处理1.1 统一返回类common.CommonResult1.2 统一返回处理器component.ResponseAdvice 2. 统一异常处理3. 拦截器实现3.1 全局变量SESSI…

宏定义天坑记录

宏定义天坑记录 事件原委与推理过程 在编译一个使用了Protobuf的项目时出现了如下报错 [ybVM-8-7-centos boost_searcher]$ make g -o http_server http_server.cc data/raw_html.pb.cc -stdc11 -lboost_system -lboost_filesystem -lpthread -ljsoncpp -lprotobuf In file…

etcd选举源码分析和例子

本文主要介绍etcd在分布式多节点服务中如何实现选主。 1、基础知识 在开始之前&#xff0c;先介绍etcd中 Version, Revision, ModRevision, CreateRevision 几个基本概念。 1、version 作用域为key&#xff0c;表示某个key的版本&#xff0c;每个key刚创建的version为1&#…

【猿灰灰赠书活动 - 05期】- 【速学Linux:系统应用从入门到精通】

&#x1f468;‍&#x1f4bb;本文专栏&#xff1a;赠书活动专栏&#xff08;为大家争取的福利&#xff0c;免费送书&#xff09; &#x1f468;‍&#x1f4bb;本文简述&#xff1a;博文为大家争取福利&#xff0c;与机械工业出版社合作进行送书活动 &#x1f468;‍&#x1f…

【虚拟机】

虚拟机 简介VMware Workstation简介下载安装许可证密钥 CentOS简介下载 创建新的虚拟机 简介 虚拟机&#xff08;Virtual Machine&#xff0c;简称VM&#xff09;是一种软件模拟的计算机&#xff0c;它在一台物理计算机上创建了一个独立的虚拟计算环境。这个虚拟环境可以运行操…

在线实时监测离子风机的功能

离子风机是一种能够通过释放大量负离子来净化空气并提供清新环境的设备。要实现联网实时在线监测离子风机&#xff0c;可以考虑以下几个步骤&#xff1a; 1. 设备接入互联网&#xff1a;离子风机需要具备网络连接功能&#xff0c;可以通过无线网络或者以太网接入路由器&#x…

[uni-app] 海报图片分享方案 -canvas绘制

文章目录 canvas使用记录先看下实际效果图绘制流程及思路1. 绘制头像, 通过drawImage来绘制2.绘制文字部分 具体代码 分享海报图片的方式,以前再RN端采用的是截图方案, 我记得组件好像是 react-native-view-shot 现在要处理uni-app的海报图片分享, 一般也有 html2canvas的相关插…

索尼 toio™应用创意开发征文|联盟国战

✨ 能用众力&#xff0c;则无敌于天下矣&#xff1b;能用众智&#xff0c;则无畏于圣人矣。 —— 孙权 前言&#xff1a; 从火爆全网的ChatGPT&#xff0c;到人人都是开发者。AI无疑贯彻了整个2023年的主题&#xff0c;从刚上幼儿园的小朋友到耄耋之年的老顽童&#xff0c;都对…

0基础学习VR全景平台篇 第96篇:VR电子楼书

大家好&#xff0c;欢迎观看蛙色VR官方系列课程——VR电子楼书&#xff01; 作为2021年底全新上线的行业解决方案&#xff0c;是专门针对地产、园区数字化营销的一站式VR解决方案&#xff0c;为行业潜在客户提供优质的7x24小时线上看房体验。 本期教程将通过功能介绍后台操作&…

SpringBoot项目集成Druid

文章目录 一、前言二、Druid相关内容1、Druid简介1.1数据库连接池 2、项目集成Druid2.1、环境准备2.2、依赖准备2.3、编写配置文件2.4、测试访问 3、功能介绍3.1、查看数据源3.2、SQL监控3.3、URI监控 三、总结提升 一、前言 本文将介绍Druid的相关内容以及项目如何集成Druid&…

C#,《小白学程序》第十二课:日历的编制,时间DateTime的计算方法与代码

1 文本格式 /// <summary> /// 《小白学程序》第十二课&#xff1a;日历的编制&#xff0c;时间DateTime的计算方法与代码 /// 本课学习时间类型的数据 DateTime 的简单方法&#xff0c;并编制一个月的日历。 /// </summary> /// <param name"sender"…

OpenWrt系统开发笔记

openWrt英文官网&#xff1a; https://openwrt.org/ 中文官网&#xff1a; http://www.openwrt.org.cn/ 一、开发环境及编译 在github上有两个源码使用的比较多   一个是lede,地址为&#xff1a;https://github.com/coolsnowwolf/lede   另一个为OpenWrt的官方源码&#…

笔记 | 排序算法实现(Python)

排序算法 一、选择排序二、合并/归并排序三、快速排序四、计数排序 排序类型时间复杂度选择排序(Selection Sort) O ( n 2 ) O(n^{2} ) O(n2)合并/归并排序&#xff08;Merge Sort&#xff09; O ( n log ⁡ n ) O(n\log n ) O(nlogn)快速排序(Quick Sort)平均情况 O ( n log ⁡…

STM32F4X RTC

STM32F4X RTC 什么是RTCSTM32F4X RTCSTM32F4X RTC框图STM32F4X RTC计数频率STM32F4X RTC日历STM32F4X RTC闹钟 STM32F4X RTC例程 什么是RTC RTC全程叫Real-Time Clock实时时钟&#xff0c;是MCU中一个用来计时的模块。RTC的一个主要作用是用来显示实时时间&#xff0c;就像日常…

利用less实现多主题切换(配合天气现象)

1. 先看效果&#xff1a; 2. 话不多说直接撸吧&#xff1a; 原理&#xff1a;先给body元素添加style&#xff0c;再根据天气现象动态更改style 开撸&#xff1a; 创建src/assets/style/variables.less 使用 XXX:var(–XXX,‘style’) 声明系列变量&#xff0c;之后添加其他变…

单臂路由实验:通过Trunk和子接口实现VLAN互通

文章目录 一、实验背景与目的二、实验拓扑三、实验需求四、实验解法1. PC 配置 IP 地址2. PC3 属于 Vlan10&#xff0c;PC4 属于 Vlan20&#xff0c;配置单臂路由实现 Vlan10 和 Vlan20 三层互通3. 测试在 PC3 上 Ping PC4 &#xff0c;可以 Ping 通 PC4 摘要&#xff1a; 本文…

任意文件读取及漏洞复现

文章目录 渗透测试漏洞原理任意文件读取1. 任意文件读取概述1.1 漏洞成因1.2 漏洞危害1.3 漏洞分类1.4 任意文件读取1.4.1 文件读取1.4.2 任意文件读取1.4.3 权限问题 1.5 任意文件下载1.5.1 一般情况1.5.2 PHP实现1.5.3 任意文件下载 2. 任意文件读取攻防2.1 路径过滤2.1.1 过…

引爆用户参与:消息重弹,让您的推送不再被忽略

在当前各大APP拉新促活成本居高不下的大背景下&#xff0c;如何稳定存量用户、提升用户粘性就显得尤为关键。从促销活动到个性化推荐&#xff0c;从互动通知到功能提醒&#xff0c;消息推送已成为各大APP连接存量用户和目标市场之间的桥梁&#xff0c;通过点击推送&#xff0c;…

springboot初试elasticsearch

引入依赖 elasticsearch的依赖版本与你elasticsearch要一致 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId> </dependency> 索引库的操作 创建索引库 impo…