目录
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<2&&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?
这些日志都可以解决
- 日志就好比生活中的日记,可以记录你生活中的点点滴滴.
- 程序中的日志,通常就是一个文件,里面记录的是程序运行过程中的各种信息