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 二、产品创…...

idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...