Java学习笔记——第十九天

特殊文本文件、日志技术

概述

特殊文件

  • 属性文件:.properties
  • XML文件:.xml

作用

  • 存储有关系的数据,做为系统的配置文件。
  • 做为信息进行传输。

日志技术

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

特殊文件:Properties属性文件

特点

  • 都只能是键值对。
  • 键不能重复。
  • 文件后缀一般是.properties结尾的。

作用

在文件里保存和读取键值对数据。

Properties类

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

使用Properties读取属性文件里的键值对数据

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

使用Properties把键值对数据写出到属性文件里去

构造器 说明
public Properties() 用于构建Properties集合对象(空容器)
常用方法 说明
public Object setProperty(String key, String value) 保存键值对数据到Properties对象中去
public void store(OutputStream os, String comments) 把键值对数据通过字节输出流写出到属性文件里去,需要写注释
public void store(Writer w, String comments) 把键值对数据通过字符输出流写出到属性文件里去,需要写注释

特殊文件:XML文件

XML( EXtensible Markup Language, 可扩展标记语言 )本质是一种数据的格式,可以用来存储复杂的数据结构和数据关系。

XML的特点

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

XML的创建

就是创建一个XML类型的文件,要求文件的后缀必须使用xml,如hello_world.xml。

IDEA创建XML文件的步骤

  1. 右键src目录。
  2. 选择new。
  3. 点击file
  4. 输入文件名,后缀必须是xml,之后按以下回车即可。

XML的语法规则

  • XML文件的后缀名为:xml,第一行必须是文档声明:
<?xml version="1.0" encoding="UTF-8" ?>
<!-- version:XML默认的版本号码、该属性是必须存在的。 -->
<!-- encoding:本XML文件的编码。 -->
  • XML中可以定义注释信息:
<!-- 注释内容 -->
  • XML中书写”<”、“&”等,可能会出现冲突,导致报错,此时可以用如下特殊字符替代。
&lt;    <  小于
&gt;    >  大于
&amp;   &  和号
&apos;  '  单引号
&quot;  "  引号
  • XML中可以写一个叫CDATA的数据区,里面的内容可以随便写,如下所示。
<![CDATA[   …内容…  ]]>

XML的作用和应用场景

  • 本质是一种数据格式,可以存储复杂的数据结构,和数据关系。
  • 应用场景:经常用来做为系统的配置文件;或者作为一种特殊的数据结构,在网络中进行传输。

读取XML文件中的数据

  • 使用程序读取XML文件中的数据。
  • 注意:程序员并不需要自己写原始的IO流代码来解析XML,有很多开源的,好用的,解析XML的框架,最知名的是:dom4j(第三方研发的)。
导入dom4j框架的步骤
  1. 在官网下载dom4j框架。
  2. 在项目中创建一个文件夹:lib。
  3. 将dom4j-(版本号).jar文件复制到 lib 文件夹。
  4. 在jar文件上点右键,选择 Add as Library -> 点击OK。
  5. 在类中导包使用。
dom4j解析XML文件的思想:文档对象模型
  1. 首先通过SAXReader解析器将xml文件的全部内容加载到内存中成为Doucument对象。
  2. 通过Document对象获取代表元素(标签)的Element对象。
  3. 通过Element对象获取代表属性的Attribute对象及其子元素和文本。
dom4j解析XML-得到Document对象
  • SAXReader:dom4j提供的解析器,可以认为是代表整个dom4j框架
构造器/方法 说明
public SAXReader() 构建dom4j的解析器对象
public Document read(String url) 把XML文件读成Document对象
public Document read(InputStream is) 通过字节输入流读取XML文件
  • Document
方法名 说明
Element getRootElement() 获得根元素对象
Element提供的方法
方法名 说明
public String getName() 得到元素名字
public List<Element> elements() 得到当前元素下所有子元素
public List<Element> elements(String name) 得到当前元素下指定名字的子元素返回集合
public Element element(String name) 得到当前元素下指定名字的子元素,如果有很多名字相同的返回第一个
public List<Element> attributes() 得到当前元素下所有属性
public String attributeValue(String name) 通过属性名直接得到属性值
public String elementText(子元素名) 得到指定名称的子元素的文本
public String getText() 得到文本

把数据写入XML文件

  • 不建议用dom4j做,因为非常繁琐。
  • 推荐直接把程序里的数据拼接成XML格式,然后用IO流写出去。

约束XML文件的编写

  • 约束XML文件就是限制XML文件只能按照某种格式进行书写。

  • 作用:防止XML文件格式被更改后出现解析错误。

约束文档

约束文档是专门用来限制xml书写格式的文档,比如:限制标签、属性应该怎么写。

约束文档的分类

  • DTD文档。
  • Schema文档。

DTD

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

DTD文档的使用步骤
  1. 编写DTD约束文档,后缀必须是.dtd,格式如下:
<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
  1. 在需要编写的XML文件中导入该DTD约束文档。

  2. 然后XML文件,就必须按照DTD约束文档指定的格式进行编写,否则就会报错。

Schema

可以约束XML文件的编写,也可以约束具体的数据类型。

Schema文档的使用步骤
  1. 编写schema约束文档,后缀必须是.xsd。
  2. 在需要编写的XML文件中导入该schema约束文档。
  3. 按照约束内容编写XML文件的标签。

日志技术

  • 程序中的日志,通常就是一个文件,里面记录的是程序运行过程中的各种信息,并可以进行永久存储。
  • 可以将系统执行的信息,方便的记录到指定的位置(控制台、文件中、数据库中)。
  • 可以随时以开关的形式控制日志的启停,无需进入到源代码中去进行修改。

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

输出语句 日志技术
输出位置 输出到控制台 可以将日志信息写入到文件或者数据库中
取消日志 需要修改代码,灵活性比较差 不需要修改代码,灵活性比较好
多线程 性能较差 性能较好

日志技术的体系结构

日志体系

  • 日志框架:开发者或者公司已经做好的实现代码,后来者直接可以拿去使用。
  • 日志接口:设计日志框架的一套标准,日志框架需要实现这些接口。
  • 注意1:因为对Commons Logging接口不满意,有人就做了SLF4J;因为对Log4j的性能不满意,有人就做了Logback。
  • 注意2:Logback是基于slf4j的日志规范实现的框架。

Logback日志框架

Logback日志框架官方网站

https://logback.qos.ch/

Logback日志框架的模块

  • logback-core:基础模块,是其他两个模块依赖的基础(必须有)。

  • logback-classic:功能模块,完整实现了slf4j API的模块(必须有)。

  • logback-access :与 Tomcat 和 Jetty 等 Servlet 容器集成,以提供 HTTP 访问日志的功能(可选)。

想使用Logback日志框架,至少需要在项目中整合如下三个模块

  • slf4j-api:日志接口

  • logback-core

  • logback-classic

使用Logback日志框架记录日志的具体步骤

  1. 在项目下新建文件夹lib,导入Logback的相关jar包(slf4j-api、ogback-core和logback-classic)到该文件夹下,并添加到项目库中去。
  2. 将Logback框架的核心配置文件logback.xml直接拷贝到src目录下(必须是src下)。
  3. 在代码中创建Logback框架提供的Logger对象:
public static final Logger LOGGER = LoggerFactory.getLogger(“类名");
  1. 调用日志对象的方法记录日志信息。

核心配置文件logback.xml

核心配置文件logback.xml是对Logback日志框架进行控制的。

日志的输出位置、输出格式的设置

通常可以设置2个输出日志的位置:一个是控制台、一个是系统文件中。

<!--File表示当前的日志信息是可以输出到控制台的-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <!--输出流对象,默认System.out改为System.err-->
    <target>System.out</target>
    <encoder>
        <!--格式化输出:%d表示日期,%thread表示线程名,%-5level表示级别从左显示5个字符宽度,%msg表示日志消息,%n表示换行符-->
        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %c [%thread] : %msg%n</pattern>
    </encoder>
</appender>
<!--File表示当前的日志信息是可以输出到文件的-->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        <charset>utf-8</charset>
    </encoder>
    <!--日志输出路径-->
    <file>D:/log/data.log</file>
    <!--指定日志文件拆分和压缩规则-->
    <rollingPolicy
             class="ch.qos.logback.ccore.rolling.SizeAndTimeBasedRollingPolicy">
    	<!--通过指定压缩文件名称,来确定文件分割方式-->
        <fileNamePattern>D:/log/data-%i-%d{yyyy-MM-dd}-.log.gz</fileNamePattern>
        <!--文件拆分大小-->
        <maxFileSize>1MB</maxFileSize>
    </rollingPolicy>
</appender>
开启日志(ALL),关闭日志(OFF)
<root level=“ALL">
	<appender-ref ref="CONSOLE"/>
	<appender-ref ref="FILE" />
</root>

日志级别

日志级别指的是日志信息的类型,用于控制系统中哪些日志级别是可以输出的。日志都会分级别,常见的日志级别如下(优先级依次升高):

日志级别 说明
trace 追踪,指明程序运行轨迹
debug 调试,实际应用中一般将其作为最低级别,而trace则很少使用
info 输出重要的运行信息,数据连接、网络连接、IO操作等等,使用较多
warn 警告信息,可能会发生问题,使用较多
error 错误信息, 使用较多
设置日志级别
  • 在核心配置文件logback.xml中开启日志和闭日志的地方设置日志级别。
  • 只有日志的级别是大于或等于核心配置文件配置的日志级别,才会被记录,否则不记录。
  • 默认级别是debug(忽略大小写)。
<root level=“info">
     <appender-ref ref="CONSOLE"/>
     <appender-ref ref="FILE" />
</root>
posted @ 2024-03-18 19:10  zgg1h  阅读(26)  评论(0)    收藏  举报