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&lt;2&amp;&amp;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设置日志级别

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

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

相关文章

cocos creator做圆形进度条

效果图&#xff1a; 我们在开发过程中经常要用到圆形进度条&#xff0c;例如技能CD 原文链接 之前写了一篇cocos2dx-lua_ProgressTimer创建扇形进度条,这里简单记录下在cocosCreator中如何制作。 具体方法 cocosCreator做起来比2dx还是要简单很多&#xff0c;首先给节点添加p…

Activity详解,用最通俗的语言告诉你什么是Activity(一)

大家好&#xff0c;我是小布丁。 今天还是分享Android基础知识&#xff0c;有Android基础的朋友都知道&#xff0c;Activity作为Android四大组件之一&#xff0c;掌管可视化界面。也是大多数人刚接触Android学的第一课。下面我来带大家学习/复习这部分知识&#xff0c;请大家不…

DotNetty ByteBuffer

DotNetty是一个高性能的.NET网络通信框架&#xff0c;基于Netty&#xff0c;支持TCP、UDP、HTTP、WebSocket等协议。适用于高并发、低延迟场景&#xff0c;如实时通信、游戏服务器、IoT应用及大型分布式系统&#xff0c;通过异步I/O、零拷贝等技术提升性能&#xff0c;具备易用…

【3.vi编辑器使用(上)】

一、vi编辑器的三种模式及切换命令 1、vi是linux中最基本的编辑器。但vi编辑器在系统管理、服务器配置工作中永远都是无可替代的。 2、vi编辑器的三种模式&#xff1a;命令行模式、插入模式、底行模式。 &#xff08;1&#xff09;命令行模式&#xff1a;用户在用vi编辑文件…

智能变革:领域大模型重塑企业知识管理!

在如今知识密集型的行业领域里&#xff0c;企业员工每天都要与海量的文档和信息打交道&#xff0c;工作邮箱里充斥着无数邮件&#xff0c;办公桌上堆满了各种报告和文档&#xff0c;而每一个文件里都可能藏有关键信息。 然而&#xff0c;要从这些杂乱无章的信息海洋中找到需要…

AI生成四季变化解决方案,四季之美,一图尽揽

随着AI技术已经渗透到我们生活的方方面面&#xff0c;在这个充满变化的时代&#xff0c;美摄科技以其前沿的AI生成技术&#xff0c;为企业带来了全新的视觉体验——AI生成四季变化解决方案。这一方案不仅能够让车辆实拍的照片焕发不同季节的风采&#xff0c;更能在不改变原图构…

【Windows配置nginx开机自启】

Windows配置nginx开机自启 方式一&#xff1a;将nginx加入到windows服务中方式二&#xff1a;通过windows任务计划设定nginx开机自启 方式一&#xff1a;将nginx加入到windows服务中 下载window service wraper&#xff08;https://github.com/winsw/winsw/releases&#xff0…

C++ 进阶(3)虚函数表解析

个人主页&#xff1a;仍有未知等待探索-CSDN博客 专题分栏&#xff1a;C 请多多指教&#xff01; 目录 一、虚函数表 二、单继承&#xff08;无虚函数覆盖&#xff09; 继承关系表&#xff1a; 对于实例&#xff1a;derive d 的虚函数表&#xff1a; 对于实例&#xff1a;b…

QT系列教程(5) 模态对话框消息传递

模态对话框接受和拒绝消息 我们创建一个模态对话框&#xff0c;调用exec函数后可以根据其返回值进行不同的处理&#xff0c;exec的返回值有两种&#xff0c;Qt的官方文档记录的为 QDialog::Accepted QDialog::RejectedAccepted 表示接受消息&#xff0c; Rejected表示拒绝消息…

如何将前端项目打包并部署到不同服务器环境

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/frontlearningNotes 觉得有帮助的同学&#xff0c;可以点心心支持一下哈&#xff08;笔记是根据b站尚硅谷的前端讲师【张天禹老师】整理的&#xff0c;用于自己复盘&#xff0c;有需要学习的可以去b站学习原版视频&…

wxPython Demo大全系列:ActivityIndicator控件分析

一、ActivityIndicator介绍 wx.ActivityIndicator 控件是 wxPython 中用于显示活动指示器的控件&#xff0c;通常用于指示程序正在执行某些后台任务或操作。它在用户界面中以动画的形式表现出活动状态&#xff0c;让用户知道应用程序正在进行处理而不是被挂起。 主要特点 可视…

数据源不同?奥威BI软件是这么做的

面对数据源不同的情况&#xff0c;BI&#xff08;商业智能&#xff09;软件如奥威BI软件通常通过一系列技术和方法来实现数据的整理。以下以奥威BI软件为例&#xff0c;详细解释其如何整理不同数据源的数据&#xff1a; 数据收集&#xff1a; 爬虫技术&#xff1a;奥威BI软件…

透视AI技术:探索折射技术在去衣应用中的奥秘

引言&#xff1a; 随着人工智能技术的飞速发展&#xff0c;其在图像处理和计算机视觉领域的应用日益广泛。其中&#xff0c;AI去衣技术作为一种颇具争议的应用&#xff0c;引发了广泛的讨论和关注。本文将深入探讨折射技术在AI去衣中的应用及其背后的原理。 一、AI去衣技术简介…

精通Java异常机制,写出高质量代码

作为一名Java开发人员&#xff0c;异常处理是一个无法回避的话题。无论你是初学者还是老手&#xff0c;精通异常处理对于写出高质量、可维护的代码至关重要。今天&#xff0c;我将与大家分享关于Java异常处理的一切&#xff0c;助你在代码质量的道路上突飞猛进! 一、什么是异常…

打造云计算时代的仿真软件

2024年5月25日&#xff0c;北京云道智造科技有限公司&#xff08;下称“云道智造”&#xff09;在深圳成功举办了2024新品发布会暨用户大会。来自全国各地的近500位客户和合作伙伴代表齐聚一堂&#xff0c;共同见证了云道智造新产品的隆重发布&#xff0c;交流分享了仿真领域的…

2024-05-29 blue-VH-driver-对外接口的并行调用-设计与思考

摘要: VH的driver的对外接口, 要做到可以并行&#xff0c;也就是两个不同的线程&#xff0c;分别调用&#xff0c;不能互相阻塞。 本文记录对其的思考和设计。 上下文: 2024-05-28 blue-VH-driver-需求分析及问题分析-CSDN博客 2024-05-27 blue-vh-问题点-CSDN博客 2024-05…

Wpf 使用 Prism 实战开发Day28

首页汇总方块点击导航功能 点击首页汇总方块的时候&#xff0c;跳转到对应的数据页面 step1: 在IndexViewModel 中&#xff0c;给TaskBar 里面Target 属性&#xff0c;赋上要跳转的页面 step2: 创建导航事件命令和方法实现 step3: 实现导航的逻辑。通过取到 IRegionManager 的…

免费,Python蓝桥杯等级考试真题--第17级(含答案解析和代码)

Python蓝桥杯等级考试真题–第17级 一、 选择题 答案&#xff1a;B 解析&#xff1a;&#xff08;x-y&#xff09;%25%21&#xff0c;故答案为B。 答案&#xff1a;B 解析&#xff1a;x16&#xff0c;所以i的值为range&#xff08;1,16&#xff09;&#xff0c;取值为1-15&…

OpenMV学习笔记2——颜色识别

目录 一、打开单颜色识别实例代码 二、代码基础部分 三、阈值选择 四、给识别到的颜色画框 五、多颜色识别 一、打开单颜色识别实例代码 如图&#xff0c;双击打开对应文件即可进入实例代码。 二、代码基础部分 # Single Color RGB565 Blob Tracking Example # # This e…

手机拍照扫描成电子版,这三款软件助你轻松搞定!

在数字化时代&#xff0c;将手机拍照的内容快速转换为电子版已经成为许多人日常生活和工作中不可或缺的技能。无论是快速记录文档、合同&#xff0c;还是将纸质照片、笔记转化为电子格式&#xff0c;手机拍照扫描功能都为我们提供了极大的便利。今天&#xff0c;就为大家介绍三…