特殊文本文件,日志技术(黑马 一套入门 3h)
特殊文件
日志技术
把程序运行的信息,记录到文件中,方便程序员定位bug,并了解程序的执行情况等。
1.为什么要用这些特殊文件
1.1存储单个用户的: 用户名,密码
1.2存储多个用户的:用户名,密码,家乡,性别
2 这些特殊文件,我们主要学什么
2.1 了解它们的特点,作用
2.2 学习使用程序读取它们里面的数据
2.3 学习使用程序把数据存储到这些文件里
Properties
使用Properties读取属性文件里的键值对数据
构造器 | 用于构建Properties集合对象(空容器) |
---|---|
public Properties() | 用于构建Properties集合对象(空容器) |
常用方法 | 说明 |
public void load(InputStream is) | 通过字节输入流,读取属性文件里的键值对数据 |
public void load(Reader reader) | 通过字符输入流,读取属性文件里的键值对数据 |
public String getProperty(String key) | 根据键获取值(其实就是get方法效果) |
public Set stringPropertyNames() | 获取全部键的集合(其实就是ketSet()方法的效果) |
public Object setProperty(String key, String value) | 保存键值对数据到Properties对象中去 |
public void store(OutputStream os, String comments) | 把键值对数据,通过字节输出流写出到属性文件里去 |
public void store(Writer w, String comments) | 把键值对数据,通过字符输出流写出到属性文件里去 |
XML(全称EXtensible Markup Language, 可扩展标记语言)
- 本质是一种数据的格式,可以用来存储复杂的数据结构和数据关系。
1.XML
- XML中的"<标签名>" 称为一个标签或一个元素,一般是成对出现的。
- XML中的标签名可以自己定义(可扩展), 但必须要正确的嵌套
- XML中只能有一个根标签
- XML中的标签可以有属性。
- 如果一个文件中放置的是XML格式的数据,这个文件就是XML文件**,后缀一般要写成.xml。**
2.XML的创建
- 就是创建一个XML类型的文件,要求文件的后缀必须使用xml,如hello_world.xml
2.1IDEA创建XML文件
3.XML的语法规则
-
XML文件的后缀名为:xml,文档声明必须是第一行
<? xml version="1.0" encoding="UTF-8" ?> version: XML默认的版本号码,该属性是必须存在的 encoding: 本XML文件的编码
-
XML中可以定义注释信息:
-
XML中书写 “<”, "&"等,可以会出现冲突,导致报错,此时可以用如下特殊字符替代。
- XML中可以写一个叫CDATA的数据区: <![CDTAT[ …内容… ]]>, 里面的内容可以随便写。
4.XML的作用和应用场景
- 本质是一种数据格式,可以存储复杂的数据结构,和数据关系。
- 应用场景: 经常用来做为系统的配置文件;或者作为一种特殊的数据结构,在网络中进行传输。
5.解析XML文件
- 使用程序读取XML文件中的数据
5.1使用Dom4J解析出XML文件
需求:使用Dom4j把一个XML文件的数据进行解析
步骤:
1. 下载Dom4j框架,官网下载
1. 在项目中创建一个文件夹: lib
1. 将dom4j-2.1.3.jar文件复制到lib文件夹
1. 在jar文件上点右键,选择Add as Library->点击OK
1. 在类中导包使用
5.2DOM4J解析XML文件的思想: 文档对象模型
- SAXReader: Dom4j提供的解析器,可以认为是代表整个Dom4j框架
构造器/方法 | 说明 |
---|---|
public SAXReader() | 构建Dom4J的解析器对象 |
public Document read(String url) | 把XML文件读成Document对象 |
public Document read(InputStream is) | 通过字节输入流读取XMl文件 |
- Document
方法名 | 说明 |
---|---|
Element getRootElement() | 获得根元素对象 |
- Element提供的方法
6.如何使用程序把数据写出到XML文件中去?
不建议用colm4J做。推荐直接把程序里的数据拼接成XML格式,然后用IO流写出去!!
6.1约束XML文件的编写[了解]
- 就是限制XML文件只能按照某种格式进行书写。专门用来限制xml书写格式的文档,比如:限制标签,属性应该怎么写。
6.2约束文档的分类(了解)
- DTT文档
1:编写DTD约束文档,后缀必须是dtd
<!ElEMENT 书架(书+)>
<!ElEMENT 书(书名,作者,售价)>
<!ElEMENT 书名(#PCDATA)>
<!ELEMENT 作者(#PCDATA)>
<!ELEMENT 售价(#PCDATA)>
2.在需要编写的XML文件中导入该DTD约束文档
3.然后XML文件, 就必须按照DTD约束文档指定的格式进行编写,否则报错!
[!warning]
可以约束XML文件的编写
不能约束具体的数据类型
- Schema文档
需求: 利用schema文档约束,约束一个XML文件的编写
1: 编写schema约束文档,后缀必须是.xsd,具体的形式到代码中观看
2: 在需要编写的XML文件中导入该schema约束文档
3: 按照约束内容编写XML文件的标签
日志
问题:
- 希望系统能记住某些数据是被谁操作的,比如被谁删除了?
- 想分析用户浏览系统的具体情况,以便挖掘用户的具体喜好?
- 当系统在开发中或者上线后出现了bug,崩溃了,该通过什么去分析,定位bug?
- 好比生活中的日记,可以纪录你生活中的点点滴滴。
- 程序中的日志,通常就是一个文件,里面记录的是程序运行过程中的各种信息。
目前记录日志的方案
public static void test(String number)try {int resul t = Integer.parselnt(number);System.out.println("输入的数字为"+result);} catch (NumberFormatException e) {System.out.println("输入的数字有误,请输入一个整数");}
}
弊端
日志会展示在控制台
不能更方便的将日志记录到其他的位置(文件,数据库)
想取消日志,需要修改源代码才可以完成
日志技术
- 可以将系统执行的信息, 方便的记录到指定的位置(控制台,文件中,数据库中)。
- 可以随时以开关的形式控制日志的启停,无需侵入到源代码中去进行修改。
日志技术的体系结构
Logback日志框架官方网站:https://lobback.qos.ch/index.html
Logback日志框架有以下几个模块
想使用Logback日志框架,至少需要在项目中整合如下三个模块:
Logback快速入门
需求
- 使用Logback日志框架,记录系统的运行信息。
实现步骤
1:导入Logback框架到项目中去。
2:将Logback框架的核心配置文件logback.xml直接拷贝到src目录下(必须是src下)。
3:创建Logback框架提供的Logger对象,然后用Logger对象调用其提供的方法就可以记录系统的日志信息。
public static final Logger LOGGER = LoggerFactory.getLogger("类名");
[!warning]
对Logback日志框架的控制,都是通过其核心配置文件logback.xml来实现的。
核心配置文件logback.xml
概念:
对Logback日志框架进行控制的。
日志的输出位置,输出格式的设置。
- 通常可以设置2个输出日志的位置: 一个是控制台,一个是系统文件中。
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<appender name="FILE" clss="ch.qos.logback.core.rolling.RollingFileAppender">
开启日志(ALL),取消日志(OFF)
<root level="ALL"><appender-ref ref="CONSOLE"/><appender-ref ref="FILE" />
</root>
Logback设置日志级别
- 日志级别指的是日志信息的类型,日志都会分级别,常见的日志级别如下(优先级依次升高):
日志级别 | 说明 |
---|---|
trace | 追踪,指明程序运行轨迹 |
debug | 调试,实际应用中一般将其作为最低级别,而trace则是很少使用 |
info | 输出重要的运行信息,数据连接,网络连接,IO操作等等,使用较多 |
warn | 警告信息,可能会发生问题,使用较多 |
error | 错误信息,使用较多 |
为什么要学习日志级别
<root level="info"><appender-ref ref="CONSOLE" /><appender-ref ref="FILE" /></root>
- 只用日志级别是大于或等于核心配置文件配置的日志级别,才会被记录,否者不记录。
信息,可能会发生问题,使用较多 |
| error | 错误信息,使用较多 |
为什么要学习日志级别
<root level="info"><appender-ref ref="CONSOLE" /><appender-ref ref="FILE" /></root>
- 只用日志级别是大于或等于核心配置文件配置的日志级别,才会被记录,否者不记录。