java:特殊文件(properties,xml)和日志

特殊文件

txt(文本文件)

txt文件是一种纯文本文件,用于存储文本信息

优缺点:txt文件简单易用,可以使用任何文本编辑器打开和编辑,但不支持数据类型和结构,所有信息均用纯文本形式保存

适合简单的配置信息存储

请添加图片描述

properties文件

properties文件是一种键值对文件,用于存储配置信息

优缺点:properties文件支持数据类型和注释,可以使用属性文件加载器加载和解析

相比txt文件,properties文件更加灵活,但仍然不支持嵌套和复杂结构

适用于键值对的配置信息存储

请添加图片描述

xml文件

xml文件是一种可扩展的标记语言,用于存储配置信息和数据,也可以作为信息进行传输

优缺点:xml文件支持复杂的数据结构和嵌套,提供了更多标签和属性来描述数据,同时支持Xpath查询和解析

但xml文件的编写和解析需要一定学习成本

适用于复杂的配置信息和数据存储

请添加图片描述

properties文件应用

java中的一种配置文件,用于存储键值对的属性.

以properties扩展名进行存储,可以使用Properties双列集合类来读写这种文件

主要用于存储应用程序的配置信息

eg:数据库连接参数,界面显示语言,文件路径

通过读取properties文件,应用程序可以根据不同的环境或者用户需求来动态加载配置信息

Properties双列集合类

HashTable的一个子类,一种map集合

不能添加泛型,默认为Object

集合中一般只添加字符串

构造器
public Properties()
//用于构建Properties集合对象(空容器)
常用方法
public void load(InputStream is)
//通过字节输入流,读取属性文件中的键值对数据
public void load(Reader reader)
//通过字符输入流,读取属性文件中的键值对数据
public String getProperty(String key)
//根据键获取值(其实就是get方法的效果)
public Set<String> stringPropertyNames()
//获取全部键的集合==keyset方法效果
//返回的是一个String泛型的Set集合
读取文件数据
public Object setProperty(String key,String value)
//保存键值对数据到Properties对象
public void store(OutputStream os,String comments)
//把键值对数据,通过字节输出流写出到属性文件里
public void store(Writer w,String comments)
//把键值对数据通过字符输出流写出到属性文件中
//comments参数传入的是对properties文件的注释,一般写一些解释和说明,默认使用Unicode编码

XML

可扩展标记语言,标签名可以自定义设计

一种用于存储和传输数据的标记语言.

用于存储配置信息和数据,也可以在不同系统和平台间数据交换和共享

XML语法规则

1,所有XML元素(标签)必须有一个开始和结束标签,且开始结束标签必须匹配

2,XML元素可以包含其他元素或者文本内容

3,XML标签对大小写敏感

4,XML元素必须正确嵌套,即两个元素必须在同一级下

5,XML属性必须在开始标签中,且由空格分隔

6,XML注释以<!--开始,-->结束

7,特殊字符(如<,>,&,"和’)在XML中有特殊的转义序列

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

8,xml文件的第一行第一列必须要写xml的一些配置属性

<?xml version = "1.0" encoding = "UTF-8"?>

9,可以通过

<![CDATA[内容]]

语法将所有内容直接以文本解析,无需使用转义字符

XML文件应用-解析

将XML文档中的数据解析出来,以便于程序读取和处理

DOM解析
将整个XML文档加载到内存,

构建一个树形结构的文档对象,适合对整个文档进行频繁读取修改和查询

效率高,但对内存占用高
SAX解析

基于事件驱动的解析方式,

逐行读取XML文档,

只在需要时才触发,适合对大型XML文件进行快速的顺序读取操作

效率相对不高,但是对大型文件效果更好
通过Dom4j(Dom for java)框架进行解析
SAXReader reader = new SAXReader();
//创建SAXReader对象(Dom4j库中用于解析XML的核心类)Document document = reader.read(new File(path));
//读取XML文件,解析为Document对象Element rootElement = document.getRootElement();
//获取根元素,通过Document对象的getRootElement()方法获取XML文档的根元素List<Element> childElements = rootElement.elements()
//通过Element对象的elements()方法获取所有子元素List
List<Element> childElements = rootElement.elements(String str)
//通过Element对象的elements()方法获取所有标签为str的子元素Listfor(Element childELement:childElements){//对子元素进行处理
}String attributeValue = childElement.attributeValue(元素)
//获取元素的属性值
Element element = childElement.element(str)
//获取标签为str的子标签
String text = childElement.getText()//获取文本

XML文件约束

专门限制XML书写格式的文档

DTD约束:

一种基于文本的约束语言,定义了XML文件的元素,属性,实体和其他结构的规则.

DTD使用一系列的声明描述XML文档的结构.

eg:元素的名称,类型,数量,顺序等

DTD通常以一个独立的DTD文件形式存在,然后在XML文件中通过DOCTYPE声明引用.

创建.dtd文件固定属性和名称

eg:

<!Element 书架(书+)>//根标签为书架,子元素书出现一次或多次
<!Element 书(书名,作者,售价)//规定子元素名称
<!Element 书名(#PCDATA)>//规定子元素内容的类型(字符串)
导入约束
<!DOCTYPE 书架 SYSTEM(PUBLIC) "dtd文件路径">//令根元素书架遵循dtd文件的规定,SYSTEM代表本地,PUBLIC代表网络上的
Schema约束:

是一种基于XML的约束语言,提供更强大和灵活的约束能力.

与DTD不同,schema使用XML语法本身来定义XML文档的结构和数据类型.

Schema可以定义元素,属性,复杂类型(序列,选择,重复等…),数据类型(整数,字符串,日期等)以及约束规则(如唯一性,键值关联和数据范围等).

通常以一个独立的XSD文件形式存在,然后在XML文件中通过命名空间引用.

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"targetNamespace="http://www.example.org/book" //命名空间xmlns:tns="http://www.example.org/book"//名称空间标识URLelementFormDefault="qualified"><element name="书架"><complexType><sequence><element name=""><complexType><sequence><element name="书名" type="string" /><element name="售价" type="double" /></sequence></complexType></element></sequence></complexType></element>
</schema>
<?xml version="1.0" encoding="UTF-8"?>
<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"//代表是一个被约束文件xmlns="http://www.baidu.com/20220408"//约束文档里的命名空间xsi:schemaLocation="http://www.baidu.com/20220408 schema_test.xsd" id = "001">//约束文档里的命名空间和约束文档的地址路径<name>ss</name><age>20</age><adress>ssss</adress>
</person>
总结

schema比DTD有更强大和灵活的约束能力,可以提供更精确的数据类型定义和更复杂的数据结构描述.

日志

一种用于记录应用程序运行状态和错误信息的工具.

可以帮助开发人员在应用程序中添加日志语句,以便在程序运行过程中查看和分析日志信息.

输出语句和日志技术的对比

输出语句

输出到控制台,取消输出需要修改代码灵活性较差

日志

可以将日志信息写入到文件和数据库中,不需要修改代码,灵活性比较好

Java日志的用途

调试

在开发过程中,可以使用日志跟踪代码执行路径,查找错误和异常的原因,验证代码的逻辑正确性.

运行监控

通过记录关键信息,可以监控和分析程序的运行状态

eg:记录请求的处理时间和访问频率等

故障排查

程序出现问题时,可以查看日志定位问题所在,快速排查故障并修复

常见Java日志框架

log4j

一个功能强大的日志框架,

支持灵活的日志级别,日志输出格式和日志记录目标

logback

log4j的继任者,提供更好的性能和可靠性,同时支持log4j的配置文件

java.util.logging

java自带的日志框架,提供一套简单易用的日志API

Java框架

相当于房子的毛坯,程序员基于框架的半成品进行搭建,完成不同的项目.

日志应用-Logback

一个Java日志框架,log4j项目的升级版.

Logback具有高性能和灵活性,可以用于各种Java应用程序和框架

Logback的步骤如下:

  1. 下载Logback库⽂件:在Logback的官⽅⽹站(http://logback.qos.ch/)上下载Logback的库⽂

件。需要下载logback-core.jar、logback-classic.jar和slf4j-api.jar三个jar包

◦ logback-core.jar提供了Logback框架的核⼼功能

◦ logback-classic.jar是对logback-core.jar进⾏功能扩展并提供了与log4j兼容的API。

◦ slf4j-api.jar是SLF4J规范的实现,它提供了统⼀的⽇志API接⼝。简单来说属于⽇志规范

  1. 将库⽂件添加到项⽬中:将下载的库⽂件添加到你的项⽬中。你可以将它们放在项⽬的lib⽬录下.

  2. 创建logback.xml⽂件:在项⽬的资源⽬录下创建⼀个名为logback.xml的⽂件。logback.xml是

Logback的配置⽂件,你可以在其中定义⽇志记录器、⽇志输出格式、⽇志级别等。(⽼师已提供)

  1. 在代码中使⽤Logback:通过调⽤LoggerFactory.getLogger(类的字节码/类名)⽅法获取⼀个

Logger实例,然后使⽤该实例记录⽇志。

 private static final Logger LOGGER = LoggerFactory.getLogger("Test");
//导包
//创建Logger类型对象
//使用LoggerFactory.getLogger("类名")获取对象

Logback日志级别

用来控制日志输出的详细程度的设置,通过设置日志级别,可以决定哪些日志消息会被输出,哪些会被忽略.

分为以下几个级别:

TRACE(追踪):

最详细的日志级别,用于跟踪代码的执行路径.

在生产环境中一般不使用该级别

DEBUG(调试):

用于调试代码时打印详细信息

eg:方法的输入参数,变量的值等

在生产环境中一般不使用该级别

INFO(信息):

用于打印程序运行时的一些重要信息

eg:程序的启动和关闭

可以帮助我们了解程序的运行情况(常用)

WARN(警告):

用于打印一些可能会导致程序出现问题的警告信息

eg:数据库连接超时,磁盘空间不足等

可以提醒我们注意可能存在的问题

ERROR(错误):

用于打印一些严重的错误信息

eg:程序崩溃,无法连接数据库等

可以帮助我们快速定位问题并进行修复(常用)

OFF(关闭)

一个特殊的级别,表示关闭日志记录

日志的输出结果

控制台打印

配置文件修改

<appender name="CONSOLE" class=""><target>System.out</target><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}[%-5level]%c%logger{36}[%Thread]:%msg%n</pattern></encoder>
</appender>

请添加图片描述

文件打印

配置文件修改

<appender name="FILE" class=""><target>System.out</target><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}[%-5level]%c%logger{36}[%Thread]:%msg%n</pattern></encoder><file>日志输出路径</file>设置日志滚动的策略ch.qos.logback.core.rolling.RollingFileAppender代表按时间滚动<rollingPolicy 		class="ch.qos.logback.core.rolling.RollingFileAppender"><fileNamePattern>指定压缩文件名称</fileNamePattern><maxFileSize>1MB文件达到多大时会被压缩</maxFileSize></rollingPolicy>
</appender>

%d{时间格式}

-n取信息中的n位

%level日志等级

%c类名

%logger{最大字符长度}

%msg日志信息

%n换行符

日志过滤

配置文件修改

<root level="⽇志级别">//只保留日志级别及以上的日志,全部保留用ALL
<!--控制台位置被⽇志级别控制-->
<appender-ref ref="CONSOLE"/>
<!--⽂件位置被⽇志级别控制-->
<appender-ref ref="FILE"/>
</root>

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

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

相关文章

从零自制docker-10-【cgroup进行容器资源限制】

文章目录 目的导入包的相关公开原则当前进程的挂载信息deferfor scanner.Scan()判断字符串包含新建的cgroup的默认文件cpu相关配置对应到ubuntu 22.04版本的cpu相关配置top注意查看你可使用的cpu注意坑启动后的top查看显示进程使用的cpu序号代码结果 目的 启动容器时通过-mem、…

《每天十分钟》-红宝书第4版-对象、类与面向对象编程(七)

类 之前的几个继承模式&#xff0c;只使用 ECMAScript 5 的特性来模拟类似于类&#xff08;class-like&#xff09;的行为。不难看出&#xff0c;各种策略都有自己的问题&#xff0c;也有相应的妥协&#xff0c;而且代码又丑又长。 为了解决这些问题&#xff0c;ECMAScript 6 …

JAVA集合(学习)

1.Java集合框架体系图 集合框架Collection单列集合List 有序&#xff0c;可重复Vector 数组结构&#xff0c;线程安全ArrayList 数组结构&#xff0c;非线程安全LinkedList 链表结构&#xff0c;非线程安全Set 无序&#xff0c;唯一HashSet 哈希表结构LinkedHashSet 哈希表…

Spring Bean作用域

Sping中bean的scope的值可以是singleton、prototype、request、session、global session。默认情况下是singleton。只有在web容器中才能使用request、session、global session。 singleton:单例模式,spring容器中有且仅有一个对象,init方法在创建容器时仅执行一次。关闭容器…

简单几步启用Ubuntu root用户密码登录

Ubuntu默认登录用户为ubuntu&#xff0c;且禁用了root用户使用密码方式登录。 若要开起root用户登录&#xff0c;只需要以下几步&#xff1a; 1.使用ubuntu用户登录Linux服务器。 2.使用sudo修改root用户密码。 sudo passwd root 输入新设置的root用户密码&#xff0c;此时…

Mac下Homebrew更新国内源brew update卡死(完美解决)

先更新下brew 有时brew版本太旧也会有问题 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 再更新国内源 #更新Homebrew cd "$(brew --repo)" git remote set-url origin https://mirrors.ustc…

jvisualVM分析jvm内存使用快照dump

服务发生内存溢出&#xff0c;就需要查看服务器上Java服务的jvm堆内存使用情况&#xff0c;可以使用dump命令生成dump文件&#xff0c;然后下载到本地&#xff0c;然后使用jvisualVM工具打开&#xff0c;即可实现可视化分析。 生成dump文件常用的两种方式&#xff1a; 第一种…

6-138 大整数相加

本题要求实现一个函数,实现大整数相加运算。大整数按每4位保存在整数数组中,如果大整数位数不是4的倍数,则将保证低位都按4位一存。如“123456789”保存为1,2345,6789。 函数接口定义: int convert(char a[],int x[]); int add(int x[],int len1,int y[],int len2,int …

[react] useState的一些小细节

1.无限循环 因为setState修改是异步的,加上会触发函数重新渲染, 如果代码长这样 一秒再修改,然后重新触发setTImeout, 然后再触发,重复触发循环 如果这样呢 还是会,因为你执行又会重新渲染 2.异步修改数据 为什么修改多次还是跟不上呢? 函数传参解决 因为是异步修改 ,所以…

代码随想录算法训练营第三十六天| 435. 无重叠区间、 763.划分字母区间、56. 合并区间

435 题目&#xff1a; 给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量&#xff0c;使剩余区间互不重叠 。 题目链接&#xff1a;435. 无重叠区间 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; …

Nacos 入门篇---服务端如何处理客户端的服务注册请求?(三)

一、引言 ok呀&#xff0c;上个章节我们讲了Nacos客户端的服务自动注册&#xff0c;今天我们来看看服务端接收到了客户端的服务注册请求&#xff0c;服务端都做了哪些事情&#xff5e; 二、目录 目录 一、引言 二、目录 三、回顾上节内容&#xff1a; 四、Nacos 服务代码入…

工作流引擎项目解析(二)

流程变量设置于获取 Activiti--流程变量_runtimeservice.setvariable-CSDN博客 Process Variables | docs.camunda.org 设置 启动时设置任务完成时设置runtimeService.setvars…()taskservice.setvars…() ProcessEngine processEngine ProcessEngines.getDefaultProcessEn…

python项目练习——24、线旅游预订系统

用户管理功能: 用户注册:用户可以填写用户名和密码进行注册。用户登录:注册过的用户可以使用用户名和密码登录系统。用户资料管理:用户可以查看和编辑自己的个人资料。旅游产品管理功能: 产品列表展示:展示可预订的旅游产品列表。产品搜索:用户可以根据关键字、目的地、…

Nginx 基础应用实战 04 在公网配置配置HTTPS

Nginx 基础应用实战 04 在公网配置配置HTTPS Nginx配置 server {listen 443 ssl;server_name aa.abc.com;ssl_certificate /data/cert/server.crt;ssl_certificate_key /data/cert/server.key;}免费签名 https://freessl.cn 阿里云 腾讯云 Nginx配置 serve…

Springboot整合nacos报错无法连接nacos

报错信息&#xff1a;Nacos com.alibaba.nacos.api.exception.NacosException: Client not connected, current status:STARTING 关于这个报错的原因有很多&#xff1a;如Nacos未启动、网络问题、配置问题、版本不兼容问题等&#xff0c;我的报错原因主要是版本不兼容。 下面…

5.9 mybatis之callSettersOnNulls作用

文章目录 1. 当callSettersOnNullstrue时2. 当callSettersOnNullsfalse时 在mybatis的settings配置参数中有个callSettersOnNulls参数&#xff0c;官方解释为&#xff1a;指定当结果集中值为 null 的时候是否调用映射对象的 setter&#xff08;map 对象时为 put&#xff09;方法…

PostgreSQL入门到实战-第三十弹

PostgreSQL入门到实战 PostgreSQL教程网站官网地址PostgreSQL概述更新计划 PostgreSQL教程网站 https://www.postgresqltutorial.com/ 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://www.postgresql.org/PostgreS…

【系统分析师】计算机网络

文章目录 1、TCP/IP协议族1.1 DHCP协议1.2 DNS协议1.3网络故障诊断 2、网路规划与设计2.1逻辑网络设计2.2物理网络设计2.3 分层设计 3、网络接入3.1 接入方式3.2 IPv6地址 4、综合布线技术5、物联网5.1物联网概念与分层5.2 物联网关键技术 6、云计算7、网络存储技术&#xff08…

neo4j使用详解(结尾、neo4j的java driver使用模板及工具类——<可用于生产>)

Neo4j系列导航: neo4j安装及简单实践 cypher语法基础 cypher插入语法 cypher插入语法 cypher查询语法 cypher通用语法 cypher函数语法 neo4j索引及调优 neo4j java Driver等更多 1. 简介 本文主要是java使用neo4j driver操作neo4j的模板项目及非常有用的工具类,主要包括: 图…

Vector - CAPL - XCP介绍_02

前面我们介绍了关于使用vector XCP License后&#xff0c;通过CAPL对XCP协议进行连接、断开和获取当前XCP连接状态的函数&#xff0c;本篇文章不做过多的其他赘述&#xff0c;我们继续介绍CAPL控制XCP相关的其他函数。 目录 xcpActivate 代码示例 xcpDeactivate xcpActiva…