java特殊文件 属性文件properties和XML文件

属性文件properties

后缀为.properties的文件,称之为属性文件,它可以很方便的存储一些类似于键值对的数据。经常当做软件的配置文件使用。
首先我们要掌握属性文件的格式:

1.属性文件后缀以.properties结尾
2.属性文件里面的每一行都是一个键值对,键和值中间用=隔开。比如: admin=123456
3.#表示这样是注释信息,是用来解释这一行配置是什么意思。
4.每一行末尾不要习惯性加分号,以及空格等字符;不然会把分号,空格会当做值的一部分。
5.键不能重复,值可以重复

请添加图片描述

那么如何读取.properties文件呢?需要使用到Properties类,Properties是Map接口下面的一个实现类,所以Properties也是一种双列集合,用来存储键值对。 但是一般不会把它当做集合来使用。Properties类的对象,用来表示属性文件,可以用来读取属性文件中的键值对。需要用到的方法如下。

请添加图片描述

Properties读取属性文件的步骤如下:

1、创建一个Properties的对象出来(键值对集合,空容器)
2、调用load(字符输入流/字节输入流)方法(哪个都行,读文本还是建议用前者),开始加载属性文件中的键值对数据到properties对象中去
3、调用getProperty(键)方法,根据键取值注意这里管道资源不需要我们手动关闭,api内部自动关
public class PropertiesTest1 {public static void main(String[] args) throws Exception {// 1、创建一个Properties的对象出来(键值对集合,空容器)Properties properties = new Properties();System.out.println(properties);//输出{}// 2、开始加载属性文件中的键值对数据到properties对象中去properties.load(new FileReader("properties-xml-log-app\\src\\users.properties"));System.out.println(properties);//输出{admin=123456,...}// 3、根据键取值System.out.println(properties.getProperty("赵敏"));System.out.println(properties.getProperty("张无忌"));// 4、遍历全部的键和值。//获取键的集合Set<String> keys = properties.stringPropertyNames();for (String key : keys) {//再根据键获取值String value = properties.getProperty(key);System.out.println(key + "---->" + value);}properties.forEach((k, v) -> {System.out.println(k + "---->" + v);});}
}

使用Properties往属性文件中写键值对,需要用到的方法如下

请添加图片描述

往Properties属性文件中写键值对的步骤如下

1、创建Properties对象出来,
2、调用setProperty存储一些键值对数据
3、调用store(字符输出流/字节输出流, 注释),将Properties集合中的键和值写到文件中注意:第二个参数是注释,必须得加;
注意这里管道资源不需要我们手动关闭,api内部自动关

先准备一个users2.properties属性文件看看会不会被修改,如下图所示

请添加图片描述
运行下面代码:

public class PropertiesTest2 {public static void main(String[] args) throws Exception {// 1、创建Properties对象出来,先用它存储一些键值对数据Properties properties = new Properties();properties.setProperty("张无忌", "minmin");properties.setProperty("殷素素", "cuishan");properties.setProperty("张翠山", "susu");// 2、把properties对象中的键值对数据存入到属性文件中去properties.store(new FileWriter("properties-xml-log-app/src/users2.properties"), "i saved many users!");}
}

运行后user2.properties 配置文件打开效果如下图所示。

请添加图片描述

PS:测试发现把路径后缀改成txt文件一样能运行,包括读文件键值对和写文件键值对。



XML文件

xml文件是一种在开发中经常使用的文件,是可扩展的标记语言,意思是它是由一些标签组成的,而这些标签是自己定义的。本质上是一种数据格式,可以用来表示复杂的数据关系。

请添加图片描述

XML文件有如下的特点:

XML中的<标签名> 称为一个标签或者一个元素,一般是成对出现的。
XML中的标签名可以自己定义(可扩展),但是必须要正确的嵌套
XML中只能有一个根标签。
XML标准中可以有属性
XML必须第一行有一个文档声明,格式是固定的<?xml version="1.0" encoding="UTF-8"?>
XML文件必须是以.xml为后缀结尾

如下图所示,是最为常见的,标签有属性、文本、还有合理的嵌套。请添加图片描述

XML文件中除了写以上的数据格式之外,还有一些特殊的字符不能直接写。像 <,>,&等这些符号不能出现在标签的文本中,因为标签格式本身就有<>,会和标签格式冲突。

<data> 3 < 2 && 5 > 4 </data>
<!--  错误写法 -->

如果标签文本中有这些特殊字符,需要用一些占位符代替。

&lt;  表示 <
&gt;  表示 >
&amp; 表示 &
&apos; 表示 '
&quot; 表示 "

如果在标签文本中,出现大量的特殊字符,不想使用特殊字符,此时可以用CDATA区,格式如下

<data1><![CDATA[3 < 2 && 5 > 4]]>
</data1>

XML解析1 获取根元素
使用程序读取XML文件中的数据,称之为XML解析。这里并不需要我们自己写IO流代码去读取xml文件中的数据。其实有很多开源的,好用的XML解析框架,最知名的是DOM4J(第三方开发的,在官网下载jar包)。DOM4J解析XML文件的思想是:文档对象模型(意思是把整个XML文档、每一个标签、每一个属性等都当做对象来看待)。Document对象表示整个XML文档、Element对象表示标签(元素)、Attribute对象表示属性、标签中的内容就是文本。

请添加图片描述

请添加图片描述

DOM4J解析XML需要用到的方法如下图所示

请添加图片描述

XML解析的过程,是从根元素开始,从外层往里层解析。 我们先把Document对象,和根元素获取出来

public class Dom4JTest1 {public static void main(String[] args) throws Exception {// 1、创建一个Dom4J框架提供的解析器对象SAXReader saxReader = new SAXReader();// 2、使用saxReader对象把需要解析的XML文件读成一个Document对象。Document document =saxReader.read("properties-xml-log-app\\src\\helloworld.xml");// 3、从文档对象中解析XML文件的全部数据了Element root = document.getRootElement();System.out.println(root.getName());//输出users}
}

XML解析2 获取子元素
获取到XML文件的根元素之后,接下来,就可以用根元素在获取到它里面的子元素(包括子标签、表属性等)。需要用到的方法如下图所示

请添加图片描述
把上面的方法对下面的XML一个一个的演示一下。

<?xml version="1.0" encoding="UTF-8" ?>
<!-- 注释:以上抬头声明必须放在第一行,必须有 -->
<!--  根标签只能有一个 -->
<users><user id="1" desc="第一个用户"><name>张无忌</name><sex>男</sex><地址>光明顶</地址><password>minmin</password><data> 3 &lt; 2 &amp;&amp; 5 > 4 </data><data1><![CDATA[3 < 2 && 5 > 4]]></data1></user><people>很多人</people><user id="2"><name>敏敏</name><sex>女</sex><地址>光明顶</地址><password>wuji</password><data> 3 &lt; 2 &amp;&amp; 5 > 4 </data><data1><![CDATA[3 < 2 && 5 > 4]]></data1></user>
</users>
public class Dom4JTest1 {public static void main(String[] args) throws Exception {// 1、创建一个Dom4J框架提供的解析器对象SAXReader saxReader = new SAXReader();// 2、使用saxReader对象把需要解析的XML文件读成一个Document对象。Document document =saxReader.read("properties-xml-log-app\\src\\helloworld.xml");// 3、从文档对象中解析XML文件的全部数据了Element root = document.getRootElement();System.out.println(root.getName());//users// 4、获取根元素下的全部一级子元素。// List<Element> elements = root.elements();// 4、获取根元素下的全部名为user的元素。List<Element> elements = root.elements("user");for (Element element : elements) {System.out.println(element.getName());//user}// 5、获取当前元素下的某个子元素。Element people = root.element("people");System.out.println(people.getText());//很多人// 如果下面有很多子元素user,默认获取第一个。Element user = root.element("user");System.out.println(user.elementText("name"));//张无忌// 6、获取元素的属性信息呢?System.out.println(user.attributeValue("id"));//1Attribute id = user.attribute("id");System.out.println(id.getName());//idSystem.out.println(id.getValue());//1List<Attribute> attributes = user.attributes();//获取user的全部属性for (Attribute attribute : attributes) {System.out.println(attribute.getName() + "=" + attribute.getValue());//id=1 desc=第一个用户}// 7、如何获取全部的文本内容:获取当前元素下的子元素文本值System.out.println(user.elementText("name"));//张无忌System.out.println(user.elementText("地址"));//光明顶System.out.println(user.elementTextTrim("地址")); // 取出文本去除前后空格System.out.println(user.elementText("password"));//minminElement data = user.element("data");System.out.println(data.getText());// 3 < 2 && 5 > 4System.out.println(data.getTextTrim()); // 取出文本去除前后空格}
}

XML文件写入
DOM4J也提供了往XML文件中写标签的方法,但是用起来比较麻烦。这里不建议使用
我们自己使用StringBuilder按照标签的格式拼接,然后再使用BufferedWriter写到XML文件中去就可以了。

public class Dom4JTest2 {public static void main(String[] args) {// 1、使用一个StringBuilder对象来拼接XML格式的数据。StringBuilder sb = new StringBuilder();sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n");sb.append("<book>\r\n");sb.append("\t<name>").append("从入门到跑路").append("</name>\r\n");sb.append("\t<author>").append("dlei").append("</author>\r\n");sb.append("\t<price>").append(999.99).append("</price>\r\n");sb.append("</book>");try (BufferedWriter bw = new BufferedWriter(new FileWriter("properties-xml-log-app/src/book.xml"));){bw.write(sb.toString());} catch (Exception e) {e.printStackTrace();}}
}
<?xml version="1.0" encoding="UTF-8" ?>
<book><name>从入门到跑路</name><author>dlei</author><price>999.99</price>
</book>

XML约束(了解)
XML约束指的是限制XML文件中的标签或者属性,只能按照规定的格式写。
比如我在项目中,想约束一个XML文件中的标签只能写<书>、<书名>、<作者>、<售价>这几个标签,如果写其他标签就报错。
怎么才能达到上面的效果呢?有两种约束技术,一种是DTD约束、一种是Schame约束。
如下图所示book.xml中引入了DTD约束文件,book.xml文件中的标签就受到DTD文件的约束

请添加图片描述

<!ELEMENT 书架(书+)>   表示根标签是<书架>,并且书架中有子标签<书>
<!ELEMENT 书(书名、作者、售价)> 表示书是一个标签,且书中有子标签<书名>、<作者>、<售价>
<!ELEMENT 书名(#PCDATA)>	表示<书名>是一个标签,且<书名>里面是普通文本
<!ELEMENT 作者(#PCDATA)>	表示<作者>是一个标签,且<作者>里面是普通文本
<!ELEMENT 售价(#PCDATA)>	表示<售价>是一个标签,且<售价>里面是普通文本

Schame约束案例
如下图所示,左边的book2.xml文件就受到右边schame文件(.xsd结尾的文件)的约束。

请添加图片描述

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

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

相关文章

【笔试强训选择题】Day37.习题(错题)解析

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;笔试强训选择题 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01; 文章目录 前言一、Day…

计算机毕设之基于python+django+mysql数据可视化的智慧社区内网平台(包含文档+源码+部署教程)

系统阐述的是一款基于数据可视化的智慧社区内网平台的设计与实现&#xff0c;对于Python、B/S结构、MySql进行了较为深入的学习与应用。主要针对系统的设计&#xff0c;描述&#xff0c;实现和分析与测试方面来表明开发的过程。开发中使用了 django框架和MySql数据库技术搭建系…

大文件上传demo,前端基于Uppy,后端基于koa

前言 文件上传基本上所有的管理系统之类的项目都有这么一个功能。因为使用了Element&#xff0c;可以方便的使用 其提供的Upload组件&#xff0c;对于普通上传来说基本上就够用了。但是有时候会涉及到大文件上传的需求&#xff0c;这时就会面临一些问题&#xff1a;比如文件上…

stable diffusion实践操作-批次出图

系列文章目录 stable diffusion实践操作 文章目录 系列文章目录前言一、批次出图介绍1.1 webUI设置1.2 参数介绍 二、批次出图使用2.1 如何设置2.1 效果展示 总结 前言 本章主要介绍SD批次出图。 想要一次产生多张图片的时候使用。 一、批次出图介绍 1.1 webUI设置 1.2 参数…

IP应用场景查询API:深入了解网络用户行为的利器

前言 随着数字时代的不断发展&#xff0c;互联网已经成为人们生活的重要组成部分。而随着越来越多的业务和社交活动迁移到在线平台上&#xff0c;了解和理解网络用户行为变得至关重要。为了满足这个需求&#xff0c;IP 应用场景查询 API 崭露头角&#xff0c;成为深入了解网络…

RabbitMQ: return机制

1. Return机制 Confirm只能保证消息到达exchange&#xff0c;无法保证消息可以被exchange分发到指定queue。 而且exchange是不能持久化消息的&#xff0c;queue是可以持久化消息。 采用Return机制来监听消息是否从exchange送到了指定的queue中 2.Java的实现方式 1.导入依赖 &l…

SQL函数

函数 字符串函数数值函数日期函数流程函数 字符串函数 常用函数&#xff1a; 函数功能CONCAT(s1, s2, …, sn)字符串拼接&#xff0c;将s1, s2, …, sn拼接成一个字符串LOWER(str)将字符串全部转为小写UPPER(str)将字符串全部转为大写LPAD(str, n, pad)左填充&#xff0c;用…

git ------ IDEA中建立本地/远程仓库及上传

目录 建立本地仓库 1. idea中选择创建本地仓库 选择目标文件 创建远程仓库 1.码云上进行库创建 将本地仓库数据提交到远程仓库 提交代码 推送到远程 建立本地仓库 1. idea中选择创建本地仓库 或 vsm中找下列2 即可 选择目标文件 成功后会出现以下标识 更新 提交 推…

盖子的c++小课堂——第二十二讲:2维dp

前言 大家好&#xff0c;我又来更新了&#xff0c;今天终于有时间了aaaaaaaa 破500粉了&#xff0c;我太高兴了哈哈哈哈哈哈&#xff08;别看IP地址&#xff0c;我去北京旅游回来了&#xff0c;他没改回来&#xff09;&#xff0c;然后我马上就成为创作者一年了&#xff0c;希…

Gitea--私有git服务器搭建详细教程

一.官方文档 https://docs.gitea.com/zh-cn/说明 gitea 是一个自己托管的Git服务程序。他和GitHub, Gitlab等比较类似。他是从 Gogs 发展而来&#xff0c;gitea的创作团队重新fork了代码&#xff0c;并命名为giteagitea 功能特性多&#xff0c;能够满足我们所有的的代码管理需…

Java基于 SpringBoot 的车辆充电桩系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 1、效果演示效果图技术栈 2、 前言介绍&#xff08;完整源码请私聊&#xff09;3、主要技术3.4.1 …

C语言文本为什么不包括库函数和预处理命令

C语言的文本不包括库函数和预处理命令 是因为库函数和预处理命令并不是C语言本身的一部分&#xff0c; 它们是由C语言标准库和预处理器提供的功能。 C语言标准库是一组预定义的函数和常量&#xff0c; 用于提供常见的功能&#xff0c;如输入输出、字符串处理、数学计算等。 …

国密SSL证书是什么?cfca的证书靠谱吗

2019年&#xff0c;《中华人民共和国密码法》第三章表明&#xff1a;“国家鼓励在外商投资过程中基于自愿原则和商业规则开展商用密码技术合作。” 2020年&#xff0c;《中华人民共和国密码法》正式施行&#xff0c; 标志着国家在提升密码工作的科学化、规范化、法治化水平&am…

TLA+学习记录1——hello world

0x01 TLA是个好工具 编程人员一个好习惯是凡事都想偷懒&#xff0c;当然是指要科学地偷懒&#xff0c;而不是真的偷懒。一直想找到一种能检验写出的代码&#xff0c;做出的设计是否真的完全正确&#xff0c;而不是靠经验检视、代码Review、反复测试去检验。因为上述方法不管怎…

End-to-End Object Detection with Transformers(论文解析)

End-to-End Object Detection with Transformers 摘要介绍相关工作2.1 集合预测2.2 transformer和并行解码2.3 目标检测 3 DETR模型3.1 目标检测集设置预测损失3.2 DETR架构 摘要 我们提出了一种将目标检测视为直接集合预测问题的新方法。我们的方法简化了检测流程&#xff0c…

借助AI分析哥斯拉木马原理与Tomcat回显链路挖掘

前言 本次分析使用了ChatGPT进行辅助分析&#xff0c;大大提升了工作效率&#xff0c;很快就分析出木马的工作流程和构造出利用方式。 分析 首先对该木马进行格式化,以增强代码的可读性。得到如下代码 <jsp:root xmlns:jsp"http://java.sun.com/JSP/Page" vers…

基于Python开发的五子棋小游戏(源码+可执行程序exe文件+程序配置说明书+程序使用说明书)

一、项目简介 本项目是一套基于Python开发的五子棋小游戏&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Python学习者。 包含&#xff1a;项目源码、项目文档、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&a…

斯坦福小镇升级版——AI-Town搭建指南

导语&#xff1a; 8月份斯坦福AI小镇开源之后&#xff0c;引起了 AIGC 领域的强烈反响&#xff0c;但8月份还有另一个同样非常有意义的 AI-Agent 的项目开源&#xff0c;a16z主导的 AI-Town 本篇文章主要讲解如何搭建该项目&#xff0c;如有英文基础或者对这套技术栈熟悉&#…

TCP之三次握手四次挥手

在前面的文章中我们了解到http是基于TCP/IP协议的&#xff0c;这篇文章我们来了解一下TCP/IP。 一、TCP与UDP 1、UDP 基于非连接。类似于写信&#xff0c;不能保证对方能不能接收到&#xff0c;接收到的内容是否完整&#xff0c;顺序是否正确。 优缺点&#xff1a;性能损耗小…

云数据库知识学习——概述

一、云计算是云数据库兴起的基础 云计算是分布式计算、并行计算、效用计算、网络存储、虚拟化、负载均衡等计算机和网络技术发展融合的产物。云计算是由一系列可以动态升级和被虚拟化的资源组成的&#xff0c;用户无需掌握云计算的技术&#xff0c;只要通过网络就可以访问这些资…