Java基础12-特殊文件和日志技术

十二、特殊文件和日志技术

1、特殊文件

properties:用来存储键值对数据。

xml:用来存储有关系的数据。

1.1 properties文件

特点:存储键值对,键不能重复,文件后缀一般是.properties结尾的。

properties:是一个Map集合,但是一般不能用来当集合使用。

核心作用: Properties是用来代表属性文件的,通过Properties 可以读写属性文件里的内容。

在这里插入图片描述

构造器说明
public Properties()用于构建Properties集合对象(空容器)
使用Properties读取键值对数据常用方法说明
public void load( InputStream is )通过字节输入流,读取属性文件里的键值对数据
public void load( Reader reader )通过字符输入流,读取属性文件里的键值对数据
public String getProperty( String key )根据键获取值(其实就是get方法的效果)
public Set stringPropertyNames()获取全部键的集合(其实就是ketSet方法的效果)

在这里插入图片描述

public class PropertiesTest {public static void main(String[] args) throws Exception {Properties properties=new Properties();properties.load(new FileReader("object-app\\src\\akc4\\SpecialFile\\abc.properties"));//根据健来获取值System.out.println(properties);  //{password=123, name=root}String name=properties.getProperty("name");String password=properties.getProperty("password");System.out.println(name);  //rootSystem.out.println(password);  //123//获取全部键存到set集合里面去Set<String> keys=  properties.stringPropertyNames();//遍历所有内容for (String key:keys) {String value=properties.getProperty(key);System.out.println(key+"----->"+value);// password----->123//name----->root}}
}
使用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 PropertiesTest {public static void main(String[] args) throws Exception {Properties properties=new Properties();//将键值对数据先保存到properties对象中去properties.setProperty("小明","54321");properties.setProperty("小花","1234");properties.setProperty("红红","5555");System.out.println(properties);//将对象数据保存到properties文件中去,如果没有该文件会自动创建。参数:(字节或字符输出流,注释)properties.store(new FileWriter("object-app\\src\\akc4\\SpecialFile\\123.properties"),"用户名和密码");}
}
1.1.2 例题

有一个info.txt文件,里面包含键值对:小明=12,小花=18,小罗=19,小天=20,判断里面是否有小罗,如果有,将值改为18。

在这里插入图片描述

public class PropertiesTest {public static void main(String[] args) throws Exception {//创建一个properties对象Properties properties=new Properties();//将文件加载到项目中来properties.load(new FileReader("object-app\\src\\akc4\\SpecialFile\\info.txt"));//因为Properties是Map中的集合,所有可通过Map提供的方法containKey方法来进行判断健是否存在。if (properties.containsKey("小罗")){//存在,将properties对象中,小罗的值进行替换properties.setProperty("小罗","18");//将对象的新值写入到对应文件中去properties.store(new FileWriter("object-app\\src\\akc4\\SpecialFile\\info.txt"),"姓名和年龄");System.out.println("修改成功!");}else{System.out.println("小罗不存在!");}}
}
1.2 XML 可扩展标记语言

作用:本质是一种数据格式,可以存储复杂的数据结构,和数据关系。

应用场景:经常用来做为系统的配置文件;或者作为-种特殊的数据结构,在网络中进行传输。格式如下:

<!--开头必须是固定的格式-->
<?xml version="1.0" encoding="UTF-8" ?><!--只有一个根标签-->
<users><user id="1"><name>小明</name><sex></sex><地址>四川</地址></user><user id="2"><name>小花</name><sex></sex><地址>四川</地址></user>
</users>

在XML中,需要转义的字符有:

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

也可以输入CD,再回车,就会出现 <![CDATA[ ]]>,在中括号里就可以输入任意字符了。

1.2.1 DOM4J解析库

下载链接:https://dom4j.github.io/

在这里插入图片描述

DOM4J解析XML-得到Document对象

SAXReader: Dom4j提供的解析器,可以认为是代表整个Dom4j框架

构造器/方法说明
public SAXReader()构建DOM4J的解析器对象
public Document read(String url )把XML文件读成Document对象
public Document read(InputStream is)通过字节输入流读取XML文件
方法名说明
Element getRootElement()获得根元素对象
通过根元素能调用的元素方法获取xml里面的内容说明
public String getName()(获取元素名字
public List elements()获取当前元素下所有的子元素
public List elements( String name )获取当前元素下指定的名字的子元素返回集合
public Element element ( String name )得到当前元素下指定名字的子元素,如果有多个名字相同的返回第一个
public String attributeValue ( String name )通过属性名直接得到属性值
public String elementText(子元素名)获取指定名称的子元素的文本
public String getText()获取文本
public class Dom4jInputTest {public static void main(String[] args) throws Exception {//创建一个saxReader对象SAXReader saxReader=new SAXReader();//将xml文件读成Document对象Document document=   saxReader.read("object-app\\src\\akc4\\xmlDir\\info.xml");//通过Document对象调用方法读取根以元素Element rootElement=document.getRootElement();//获取元素名System.out.println(rootElement.getName());//users//获取根元素下第一个元素为user的元素,再获取元素对应的id属性值String id1=rootElement.element("user").attributeValue("id");System.out.println(id1); //1//获取根元素下第一元素为user的元素,再向下的name元素,获取其对应的文本String  name=rootElement.element("user").element("name").getText();System.out.println(name);  //小明//获取根元素下的所有元素存放到list集合中List<Element>  listElements=rootElement.elements();//遍历xml中所有人的个人信息for (Element listElemnt: listElements) {System.out.println("----------------------------");System.out.println(listElemnt.element("name").getText());System.out.println(listElemnt.element("sex").getText());System.out.println(listElemnt.element("地址").getText());}}
}

写出XML数据:推荐直接把程序里的数据拼接成XML格式,然后用IO流写出去!

1、通过StringBuilder来进行拼接xml。

2、将拼接好的字符串通过缓冲字符输出流输出到xml文件中就行。

2、日志技术

作用1:把程序运行的信息,记录到文件中,方便程序员定位bug、并了解程序的执行情况等。

作用2:可以随时以开关的形式控制日志的启停,无需侵入到源代码中去进行修改。

因为对Commons Logging接口不满意,有人就搞了SLF4};因为对Log4j的性能不满意,有人就搞了Logback。

在这里插入图片描述

在这里插入图片描述

下载对应的jar包: slf4j-api、``logback-corelogback-classic`

下载jar包网站,以后所以的jar包都可以在里面下载,也支持maven下载。

网站链接:https://mvnrepository.com

注意版本间是兼容,可参考:slf4j-api-1.7.26、logback-core-1.2.3、logback-classic-1.2.3

2.1 实现步骤
  1. 导入slf4j-api、logback-corelogback-classic框架到项目中去。

  2. 将Logback框架的核心配置文件logback.xml直接拷贝到src目录下(必须是src下),logback.xml如下:注意改一下路径,改到自己的项目目录下的某个地方。value="W:/StudyFile.."

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration debug="false"><!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--><property name="LOG_HOME" value="W:/StudyFile/Java/Projiect/BasicTraining/object-app/src/log"/><!--日志输出位置:控制台日志, 控制台输出 --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%msg:日志消息,%n是换行符--><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern></encoder></appender><!--文件日志, 按照每天生成日志文件 --><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--日志文件输出的文件名--><FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern><!--日志文件保留天数--><MaxHistory>30</MaxHistory></rollingPolicy><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern><!--日志输出编码--><charset>UTF-8</charset></encoder><!--日志文件最大的大小--><triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"><MaxFileSize>10MB</MaxFileSize></triggeringPolicy></appender><!-- show parameters for hibernate sql 专为 Hibernate 定制 --><logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" /><logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" /><logger name="org.hibernate.SQL" level="DEBUG" /><logger name="org.hibernate.engine.QueryParameters" level="DEBUG" /><logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" /><!--myibatis log configure--><logger name="com.apache.ibatis" level="TRACE"/><logger name="java.sql.Connection" level="DEBUG"/><logger name="java.sql.Statement" level="DEBUG"/><logger name="java.sql.PreparedStatement" level="DEBUG"/><!-- 日志输出级别 (level="OFF" 所有是日志都不记录,level="ALL" 所有的日志都被记录,level="DEBUG" 代表所有等级为DEBUG及以上的日志(即 DEBUG, INFO, WARN, ERROR)都会被记录下来。) --><root level="DEBUG"><!--输出到控制台--><appender-ref ref="STDOUT" /><!--输出到文件--><appender-ref ref="FILE"/></root>
    </configuration>

    日志级别指的是日志信息的类型,日志都会分级别,常见的日志级别如下表(优先级依次升高) :

    只有日志的级别是大于或等于核心配置文件配置的日志级别,才会被记录,否则不记录。

    日志级别说明
    trace追踪,指明程序运行轨迹
    debug调试,实际应用中一般将其作为最低级别,而trace则很少使用
    info输出重要的运行信息,数据连接、网络连接、10操作等等,使用较多
    warn警告信息, 可能会发生问题,使用较多
    error错误信息,使用较多
  3. 创建Logback框架提供的Logger对象,然后用Logger对象调用其提供的方法就可以记录系统的日志信息。类名随便取。

    public static final Logger LOGGER = LoggerFactory. getLogger(“类名");

2.2 测试代码

会在控制台上输出,也会写入到 :TestWeb+文件修改日期.log 的文件里。

public class LogBackTest {//创建一个日志对象public static final Logger LOGGER= LoggerFactory.getLogger("LogTest");public static void main(String[] args) {LOGGER.info("开始记录日志!");chu(10,0);LOGGER.info("执行成功日志!");}public static void chu(int a,int  b){LOGGER.debug("传入的值为:a="+a+",b="+b);try {int c=a/b;LOGGER.info("结果为:"+c);}catch(Exception e){LOGGER.error("错误日志:"+e);}}
}

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

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

相关文章

自定义注解和组件扫描在Spring Boot中动态注册Bean(一)

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 在Spring Boot中&#xff0c;自定义注解和组件扫描是两种强大的机制&#xff0c;它们允许开发者以声明性的方式动态注册Bean。这种方式不仅提高了代码的可读性和可维护性&#xff0c;还使得Spring Boot应用的…

UPDATE 更新数据

1.更新某一列字段的值 以 teacher 表为例&#xff0c;需要把前 3 条数据的 age 更新为 33&#xff0c;命令如下: UPDATE teacher SET age18,id_number44444444440604099X WHERE id 30;执行结果如下图 : 这里是对 age 字段列的前三条值进行数据的更新&#xff0c;注意更新…

网络安全有关法律法规

1. 前言 在当今数字化高速发展的时代&#xff0c;网络安全已成为关乎国家、企业和个人的重要议题。为了应对日益复杂的网络安全挑战&#xff0c;一系列网络安全法律法规应运而生&#xff0c;它们如同坚实的盾牌&#xff0c;守护着我们的数字世界。现在是2024年10月&#xff0c…

EM算法学习

1.EM算法的介绍 可以发现&#xff1a;计算出θA和θB的值的前提是知道A、B币种的抛掷情况。 所以我们需要使用EM算法&#xff1a;求出每轮选择硬币种类的概率 2.EM算法执行过程&#xff1a; 第一步&#xff1a;首先初始化设置一组PA和PB证明的值。然后通过最大似然估计得到每…

MOE论文详解(3)-Switch Transformers

Switch Transformers也是google在2022年发表的一篇论文, 该论文简化了MoE的路由算法, 减少了计算量和通信量; 第一次支持bfloat16精度进行训练. 基于T5-Base和T5-Large设计的模型在相同的算力下训练速度提升了7x倍; 同时发布了1.6万亿(1.6 trillion)参数的MoE模型&#xff0c;相…

Linux系统:Ubuntu上安装Chrome浏览器

Ubuntu系统版本&#xff1a;23.04 在Ubuntu系统上安装Google Chrome浏览器&#xff0c;可以通过以下步骤进行&#xff1a; 终端输入以下命令&#xff0c;先更新软件源&#xff1a; sudo apt update 或 sudo apt upgrade终端输入以下命令&#xff0c;下载最新的Google Chrome .…

多机编队—(3)Fast_planner无人机模型替换为Turtlebot3模型实现无地图的轨迹规划

文章目录 前言一、模型替换二、Riz可视化三、坐标变换四、轨迹规划最后 前言 前段时间已经成功将Fast_planner配置到ubuntu机器人中&#xff0c;这段时间将Fast_planner中的无人机模型替换为了Turtlebot3_waffle模型&#xff0c;机器人识别到环境中的三维障碍物信息&#xff0…

5 首页框架及路由配置

1 添加首页LayoutVue.vue组件&#xff0c;登录成功之后跳转到该组件 <script setup> import {Management,Promotion,UserFilled,User,Crop,EditPen,SwitchButton,CaretBottom } from element-plus/icons-vue import avatar from /assets/default.png// 导入ref import {…

GitLab 老旧版本如何升级?

极狐GitLab 正式对外推出 GitLab 专业升级服务 https://dl.gitlab.cn/cm33bsfv&#xff01; 专业的技术人员为您的 GitLab 老旧版本实例进行专业升级&#xff01;服务详情可以在官网查看详细解读&#xff01; 那些因为老旧版本而被攻击的例子 话不多说&#xff0c;直接上图&a…

RTMP、FFmpeg安装测试

RTMP、FFmpeg安装测试 1.使用 Docker 部署 RTMP 服务1.拉取带有 RTMP 模块的 NGINX 镜像&#xff1a;2.运行容器 2. 防火墙放行3.windows安装ffmpeg1. [下载链接](https://ffmpeg.org//download.html)2.解压3.环境变量配置 4.常用的 FFmpeg 推流和拉流命令1.推流命令1. 推流到 …

SQL实现给表添加数据及其触发器操作

新建一个表实现添加数据&#xff0c;数据不重复&#xff0c;。判断两个字段是否存在&#xff0c;如果存在&#xff0c;就修改对应字段&#xff0c;如果不存在就新增数据。 测试表格Test如下&#xff1a; 新建触发器如图&#xff1a; 触发程式如下&#xff1a; USE [Test] GO/*…

C语言_字符串+内存函数的介绍

字符函数和字符串函数 本章重点 重点介绍处理字符和字符串的库函数的使用和注意事项 求字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 字符串查找 strstr strtok 错误信息报告 strerror 字符操作内存操作函数 memcpy memmove memset memcmp 1. 字…

【含文档】基于Springboot+Vue的白云山景点门票销售管理系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

Mysql(七) --- 索引

文章目录 前言1.简介1.1.索引是什么&#xff1f;1.2.为什么使用索引? 2.索引应该使用什么数据结构&#xff1f;2.1.Hash2.2.二叉搜索树2.3.N叉树2.4.B树2.4.1. 简介2.4.2. B树的特点2.4.3. B树和B树的对比 3.Mysql中的页3.1.为什么要使用页3.2.页文件头和页文件尾3.3.页主体3.…

小新学习Docker之Docker--harbor私有仓库部署与管理

目录 一、Harbor简介 1.1、Harbor概述 1.2、Harbor的特性 1.3、Harbor的构成 二、Harbor构建Docker私有仓库 2.1、部署Harbor服务 2.2、启动 Harbor 2.3、查看 Harbor 启动镜像&#xff0c;检查harbor是否安装成功 2.4、创建一个新项目 2.5、非本地主机进行下载镜像 …

STM32学习--4-1 OLED显示屏

接线图 OLED.c #include "stm32f10x.h" #include "OLED_Font.h"/*引脚配置*/ #define OLED_W_SCL(x) GPIO_WriteBit(GPIOB, GPIO_Pin_8, (BitAction)(x)) #define OLED_W_SDA(x) GPIO_WriteBit(GPIOB, GPIO_Pin_9, (BitAction)(x))/*引脚初始化*/ void …

软件安全漏洞挖掘: 基础知识和概念

1. 软件漏洞原理和漏洞检测方法 文章目录 1. 软件漏洞原理和漏洞检测方法1. 漏洞披露2. 漏洞定义和分类1. 漏洞的定义2. 漏洞的分类3. 漏洞检测方法常见方法1. 程序切片2. 形式化方法1. 符号执行3. 污点分析污点分析步骤/流程*污点分析流程的详细介绍1. 识别source和sink点2. 污…

Pycharm通过ssh远程docker容器搭建开发环境

本地pycharm通过ssh方式远程连接服务器&#xff08;Ubuntu&#xff09;上的docker容器&#xff0c;搭建开发环境。实现功能&#xff1a;将环境依赖打包成docker镜像&#xff0c;并在远程服务器中启动容器&#xff08;启动时做好端口映射和文件夹挂载&#xff09;&#xff0c;通…

使用vscode导入库失败解决方法

导入库失败原因 在使用vscode写python代码时&#xff0c;有时会遇见导入库失败的情况&#xff0c;如下图&#xff1a;无法解析导入“xxxxx” 或者 运行时报错&#xff1a;ModuleNotFoundError: No module named xxxxx。 原因可能有&#xff1a; 根本没有下载库&#xff1b…

Luminar Neo v1.21.0.13934 图像编辑软件绿色便携版

skylum Luminar Neo 是一款由未来 AI 技术驱动的创意图像编辑器。并且支持微软Windows及苹果Mac OX系统&#xff0c;它使创作者能够将他们最大胆的想法变为现实并乐在其中。借助 Luminar Neo 领先的 AI 技术和灵活的工作流程&#xff0c;完成创意任务并获得专业品质的编辑结果。…