Java开发-特殊文本文件,日志技术
目录
01.特殊文件,日志技术概述
02.特殊文件:Properties属性文件
编辑Properties案例
特殊文件:XML文件
XML的作用和应用场景
读取XML文件中的数据
XML的生成
约束XML文件的编写[了解]
日志技术
日志技术的体系
编辑
编辑
Logback日志框架的概述
Logback快速入门
核心配置文件logback.xml
logback设置日志级别
01.特殊文件,日志技术概述
我们之前所熟知的txt文件

但是在Java中有一特殊文件文件


我们应该会有这样一个疑问:为什么要用这些特殊文件?
假设一个场景: 存储多个用户的用户名和密码
如果我们用普通文件:
这样读取出来的数据没有办法解析.但是如果我们用属性文件,采取键值对的形式存储
XML也可以存储
这些特殊的文件可以把数据关系存储进去,方便我们读取出来之后能够解析它们的用户名和密码.在这个假设中用属性文件存储是更好的,那我们什么时候使用XML呢?
我们再来假设一个场景:我们要存储多个用户的:用户名,密码,家乡,性别
如果我们用属性文件存储信息回比较多很难解析那个地方开始那个低位结尾,如果我们用XML就非常nice!
总结:为什么要用这些特殊文件?因为这些特殊文件可以存储有关系的数据,作为系统的配置文件,作为信息进行传输
那么这些文件,我们主要学什么?
了解它们的特点,作用
学习使用程序读取它们的数据
学习使用程序把数据存储到这些文件里
日志技术:把程序运行的信息,记录到文件中,方便程序员定位bug,并了解程序的执行情况等.
02.特殊文件:Properties属性文件
特点:
1.都只能是键值对
2.键不能重复
3.文件后缀一般是.properties结尾的
我们读取属性文件可以用io流一行一行的读取,但是这样太麻烦繁琐,所以java提供了一个非常优雅的方案:使用一个Map集合Properties

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

代码实现:


注意:一定要检查一下编码方式,检查一下是不是UTF-8否认会出现???而不是中文
下面是查看设置的方法

import java.io.FileReader;
import java.util.Properties;/*** 目标:掌握使用Properties类读取属性文件中的键值对信息.*/
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("Maven--1\\src\\main\\users.properties"));System.out.println(properties);}}

import java.io.FileReader;
import java.util.Properties;
import java.util.Set;/*** 目标:掌握使用Properties类读取属性文件中的键值对信息.*/
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("Maven--1\\src\\main\\users.properties"));
// System.out.println(properties);//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把键值对数据写出到属性文件里去

import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;/*** 目标:掌握把键值对数据存入到属性文件中去*/
public class PropertiesTest2 {public static void main(String[] args) throws Exception {//1.创建Properties对象出来,西安用它存储一些键值对数据Properties properties = new Properties();properties.setProperty("掌握及","yjy");properties.setProperty("张素素","cuishan");//2.把properties对象中的键值对存入到属性文件中去//这个管道不需要自己关,内部用完会自己关properties.store(new FileWriter("Maven--1\\src\\main\\users2.properties"),"I saved many users!");}
}

Properties案例
一个属性文件的题目:
首先新建一个文件users.txt

题目是:找一下这个users.txt中有没有李芳,有的话改成18
import java.io.FileReader;
import java.io.FileWriter;
import java.util.Properties;public class PropertiesTest3 {public static void main(String[] args) throws Exception {//目标:读取属性文件,判断是否存在李芳,存在年龄为18 无所谓后缀只要是键值对的形式即可//1.加载属性文件的键值对到程序中来.Properties properties = new Properties();//2.开始加载properties.load(new FileReader("Maven--1\\src\\users.txt"));//3.判断是否包含李芳这个键if(properties.containsKey("李芳")){properties.setProperty("李芳","18");}//4.把properties对象的键值对数据重写写出去到属性文件中去properties.store(new FileWriter("Maven--1\\src\\users.txt"),"success");}
}
特殊文件:XML文件
XML(全称EXtensible Markup Language,可扩展标记语言)
本质是一种数据的格式,可以用来存储复杂的数据结构,和数据关系.

XML的特点
- XML的"<标签名>"称为一个标签或一个元素,一般是成对出现的.
- XML中的标签名可以自己定义(可扩展),但必须是正确的嵌套.
- XML中只能有一个跟标签
- XML中的标签可以有属性.
- 如果一个文件中放置的是XML格式的数据,这个文件就是XML文件,后缀一般要写成.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!-- 注释:以上抬头声明必须放在第一行,必须有-->
<!-- 根标签只能有一个-->
<users><user id="1"><name>张无忌</name><sex>男</sex><地址>光明顶</地址><password>minmin</password><!-- <data> 3<2 && 5>4 </data> --></user><user id="2"><name>敏敏</name><sex>女</sex><地址>光明顶</地址><password>无忌</password></user></users>


<?xml version="1.0" encoding="UTF-8" ?>
<!-- 注释:以上抬头声明必须放在第一行,必须有-->
<!-- 根标签只能有一个-->
<users><user id="1"><name>张无忌</name><sex>男</sex><地址>光明顶</地址><password>minmin</password><data>3<2&&5>4</data><data1><!-- 生成这个快捷CD --><![CDATA[3<2 && 5>4]]></data1></user><user id="2"><name>敏敏</name><sex>女</sex><地址>光明顶</地址><password>无忌</password></user></users>
XML可以在浏览器中渲染


XML的作用和应用场景

读取XML文件中的数据
一般会叫解析XML文件中的数据





自上而下的解析思想,一级一级地解析

import org.dom4j.Element;
import org.dom4j.io.SAXReader;import java.util.List;public class Dom4jTest1 {/*** 目标:掌握使用Dom4j框架解析XML文件*/public static void main(String[] args) throws Exception {// 1.创建一个Dom4j框架提供的解析器对象SAXReader saxReader = new SAXReader();// 2.使用saxReader对象把需要解析的XML文件读成一个Document对象.Document document = saxReader.read("Maven--1\\src\\helloworld.xml");// 3.从文档对象中解析XML的全部数据Element root = document.getRootElement();System.out.println(root.getName());//users// 4.获取根元素下的全部一级子元素List<Element> elements = root.elements();for (Element element : elements) {System.out.println(element);}List<Element> elements2 = root.elements("user");//指定拿某个//5.获取当前元素下的某个子元素Element people = root.element("people");System.out.println(people.getText());//很多人// 如果下面有很多的子元素user,默认获取第一个Element use2 = root.element("user");System.out.println(use2.elementText("name"));//张无忌//6.获取元素的属性信息System.out.println(use2.attributeValue("id"));//1Attribute id = use2.attribute("id");System.out.println(id.getName());System.out.println(id.getValue());List<Attribute> attributes = use2.attributes();for (Attribute attribute : attributes) {System.out.println(attribute.getName() + "=" + attribute.getValue());}// 7.如何获取全部的文本内容:获取当前元素下的子元素的文本值System.out.println(use2.elementText("name"));System.out.println(use2.elementText("地址"));System.out.println(use2.elementText("password"));//TextTrim去掉空格}
}
XML的生成
如何使用程序把数据写出到XML文件中去? 现在开发中已经不用了,不建议用dom4j
推荐直接把程序里的数据拼接成XML格式,然后用IO流输出
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;public class Dom4jTest2 {/*** 目标:如何使用程序把数据写出到XML文件中去*<?xml version="1.0" encoding="UTF-8" ?>
* <book>
* <name>从入门到跑路</name>
* <author>dlei</author>
* <price>999.9</price>
* </book>*/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.9").append("</price>\r\n");sb.append("</book>");try (BufferedWriter bw = new BufferedWriter(new FileWriter("Maven--1/src/book.xml"));){bw.write(sb.toString());} catch (IOException e) {throw new RuntimeException(e);}}
}
约束XML文件的编写[了解]



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

schema可以约束具体数据类型


日志技术
什么是日志?
希望系统能记住某些数据是被谁操作的,比如被谁删除了?
像分析用户浏览系统的具体情况,以便挖掘用户的具体喜好?
当系统在开发中或者上线后出现了bug,崩溃了,该通过什么去分析,定位bug?
这些日志都可以解决
- 日志就好比生活中的日记,可以记录你生活中的点点滴滴.
- 程序中的日志,通常就是一个文件,里面记录的是程序运行过程中的各种信息


日志技术的体系
Logback日志框架的概述

Logback快速入门





核心配置文件logback.xml



logback设置日志级别


相关文章:
Java开发-特殊文本文件,日志技术
目录 01.特殊文件,日志技术概述 02.特殊文件:Properties属性文件 编辑Properties案例 特殊文件:XML文件 XML的作用和应用场景 读取XML文件中的数据 XML的生成 约束XML文件的编写[了解] 日志技术 日志技术的体系 编辑 编辑 Logback日志框架的概述 Logback快…...
Django ORM深度游:探索多对一、一对一与多对多数据关系的奥秘与实践
系列文章目录 Django入门全攻略:从零搭建你的第一个Web项目Django ORM入门指南:从概念到实践,掌握模型创建、迁移与视图操作Django ORM实战:模型字段与元选项配置,以及链式过滤与QF查询详解Django ORM深度游ÿ…...
无人机路径规划:基于鸽群优化算法PIO的无人机三维路径规划MATLAB代码
一、无人机模型介绍 无人机三维航迹规划_无人机航迹规划-CSDN博客 二、部分代码 close all clear clc warning (off) global model global gca1 gca2 gca3 gca4 model CreateModel(); % Create search map and parameters load(BestPosition5.mat); load(ConvergenceCurve5…...
ArcGIS属性域和子类型
01 属性域 道路的车道数值是小于10的。在编辑道路的此属性时,为了限制其值在10以内,可以使用属性域。当输入数据超过10时,就会限制输入。 限制输入这个功能是Pro特有的,在ArcMap中输入超出限制的值也是合法的,需要手动…...
电子电器架构 --- 什么是域控制器?
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…...
链表头部插入结点
Linked List Inserting a node at beginning #include<stdlib.h>//为了用malloc #include<stdio.h> struct node {int data;struct node* next;//在cpp中可以只写 Node *Link;//为了表意明确,Link也经常被命名为next }; struct node* head…...
k8s集群修改apiserver的ip地址
有时候由于服务器的调整,导致ip的的变化,k8s集群的api大管家的ip变动会导致kubectl的接口都无法正常使用,这是只需要将k8s主节点配置文件的ip替换即可。 例如无需要将原来的192.168.146.202的ip替换成192.168.85.202,执行一下操作…...
C语言编程技巧:深度挖掘与高效实践
C语言编程技巧:深度挖掘与高效实践 在编程的世界里,C语言以其高效、灵活和底层控制能力强等特点,一直备受开发者们的青睐。然而,要想真正掌握C语言的精髓,并编写出高效、健壮的代码,却并非易事。本文将从四…...
十_信号14 - system()
意思是 应在在调用 system() 函数前 阻塞 SIGCHLD 信号,否则,子进程结束的时候,系统会向该进程(父)发送 SIGCHLD信号,则该进程认为是自己的一个子进程结束了,于是调用 wait函数获取子进程的终止状态。这本来是正常的操…...
【Python网络爬虫】详解python爬虫中URL资源抓取
🔗 运行环境:PYTHON 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥 推荐专栏:《算法研究》 #### 防伪水印——左手の明天 #### 💗 大家好🤗ᾑ…...
AI办公自动化:用kimi批量提取音频中的标题并重命名
很多音频文件,文件名很乱,需要根据音频信息中的标题聪明吗 在kimi中输入提示词: 你是一个Python编程专家,一步步的思考,完成以下脚本的撰写: 打开文件夹:E:\有声\a16z播客 读取里面所有的mp3格…...
flyfish3.0.0配置避坑
1.基础环境准备篇 doc/01-基础环境准备篇.md 云智慧/FlyFish - Gitee.com 使用教程里给出的java环境时,可以显示java版本,但是不能显示Maven的版本 改为: export NODE_HOME/usr/local/node/node-v14.19.3-linux-x64 export PATH$NODE_HOME…...
Spring (33)CSRF(跨站请求伪造)保护
跨站请求伪造(CSRF)是一种常见的网络攻击手段,它允许攻击者在不知情的用户浏览器中发起恶意请求。这种攻击利用了网站对用户浏览器的信任。如果用户在浏览器中已经登录了一个网站,攻击者就可以构造一个请求,这个请求能…...
【一刷《剑指Offer》】面试题 29:数组中出现次数超过一半的数字
力扣对应题目链接:169. 多数元素 - 力扣(LeetCode) 牛客对应题目链接:数组中出现次数超过一半的数字_牛客题霸_牛客网 (nowcoder.com) 核心考点 : 数组使用,简单算法的设计。 一、《剑指Offer》对应内容 二…...
vx小程序初学
小程序初学 在我还没接触到微信小程序之前,通常使用轮播要么手写或使用swiper插件去实现,当我接触到微信小程序之后,我看到了微信小程序的强大之处,让我为大家介绍一下吧! swiper与swiper-item一起使用可以做轮播图 …...
vue 笔记01
目录 01 vuejs中属性的基本使用 02 v-show指令的使用 03 v-if 指令的使用 04 v-for指令的使用 05 v-model 指令 06 template模板标签 07 v-on事件的绑定指令 08 事件中的event对象 01 vuejs中属性的基本使用 {{ }} 叫做mustache模板语法 双花括号 小胡子语法 双花括号…...
开发电商系统的技术选型
开发电商系统是一个复杂的任务,需要全面的技术选型来确保系统的稳定性、可扩展性和性能。本文将详细探讨在开发电商系统时涉及的各方面技术选型,包括架构设计、前端技术、后端技术、数据库选择、缓存策略、安全性、支付系统、日志和监控、以及自动化运维…...
C++STL---vector常见用法
C STL中的vector vector是C标准模板库(STL)中最常用的序列容器之一,它是一个动态数组,能够存储任意类型的对象(如整数、字符串等)。vector的主要优点是提供了快速的随机访问,同时还能够动态地调…...
linux文件共享之samba
1.介绍 Samba是一个开源文件共享服务,可以使linux与windows之间进行文件共享,可以根据不同人员调整共享设置以及权限管理。 2.安装 一个命令就OK了:yum install -y samba [rootansible01 ~]# yum install -y samba 已加载插件:l…...
端午传统食品创意营销方案
端午传统食品创意营销方案 目 录 一、市场营销环境分析 1 (一)历史记载 1 (二)粽叶的象征 1 (三)粽子文化 1 (四)竞争分析 2 (五)粽子当今发展 4 二、产品创…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...







