Java
基础知识
01概述
02变量
03运算符
04程序控制语句
05数组
06面向对象编程
07代码练习
08重载
09作用域
10构造方法&构造器
11this
12包
13修饰符
14封装
15继承
16super
17覆盖&重写
18多态
19零钱通项目
20类变量&类方法
21抽象类
22接口
23内部类
24枚举
25泛型
26常用API
27lambda表达式
28正则表达式
29异常
30File&IO流
31日志技术
32多线程
33网络编程
-
+
首页
31日志技术
## 特殊文件-properties文件 > 特点 - 只能是键值对 - 键是不能重复的 - 文件后缀一般为.properties结尾 > 概述 - properties是一个Map集合(键值对集合),但是一般不会当集合进行使用 - 核心的作用:用来代表属性文件,通过proerties进行读写属性文件里的内容 > 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) | 把键值对数据,通过字符输出流写出到属性文件里去 | > 总结 可以存储properties属性集的键值对数据到属性文件中,void store(Writer writer,String comments) 可以加载属性文件中的数据到properties对象中来,void load(Reader reader) > demo 从文件中读取 ```java package com.itheima.d1_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("properties-xml-log-app\\src\\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); }); } } ``` 写入到文件中去 ```java package com.itheima.d1_properties; import java.io.FileWriter; import java.util.Properties; /** * 目标:掌握把键值对数据存入到属性文件中去 */ public class PropertiesTest2 { public static void main(String[] args) throws Exception { // 1、创建Properties对象出来,先用它存储一些键值对数据 Properties properties = new Properties(); properties.setProperty("张无忌", "minmin"); properties.setProperty("殷素素", "cuishan"); properties.setProperty("张翠山", "susu"); // 2、把properties对象中的键值对数据存入到属性文件中去 properties.store(new FileWriter("properties-xml-log-app/src/users2.properties") , "i saved many users!"); } } ``` ## XML > 概述 - 一种数据的格式,用于存储复杂的数据结构和数据关系 > 特点 - XML中的“<标签名>” 称为一个标签或一个元素,一般是成对出现的。 - XML中的标签名可以自己定义(可扩展),但必须要正确的嵌套。 - XML中只能有一个根标签。 - XML中的标签可以有属性。 - 如果一个文件中放置的是XML格式的数据,这个文件就是XML文件,后缀一般要写成.xml。 > 语法规则 ``` XML文件的后缀名为:xml,文档声明必须是第一行 <?xml version="1.0" encoding="UTF-8" ?> version:XML默认的版本号码、该属性是必须存在的 encoding:本XML文件的编码 XML中可以定义注释信息:<!–- 注释内容 --> XML中书写”<”、“&”等,可能会出现冲突,导致报错,此时可以用如下特殊字符替代。 < < 小于 > > 大于 & & 和号 ' ' 单引号 " " 引号 ``` > 应用场景 - 作为系统的配置文件或者作为一种特殊的数据结构,在网络中进行传输 ## Dom4j解析xml  > 解析方法 - 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 String attributeValue(String name) | 通过属性名直接得到属性值 | | public String elementText(子元素名) | 得到指定名称的子元素的文本 | | public String getText() | 得到文本 | > demo ```java package com.xbxaq.xml_; import com.sun.xml.internal.fastinfoset.tools.StAX2SAXReader; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; import org.xml.sax.SAXException; import java.util.List; public class Dom4jTest { public static void main(String[] args) throws Exception { //1、创建一个DOM4j框架提供的解析对象 SAXReader saxReader = new SAXReader(); //2 使用对象把需要解析的xml文件读成document对象 Document document = saxReader.read("src/com/xbxaq/xml_/helloworld.xml"); //3 从文档对象中解析XML文件的全部数据 获取根元素 Element root = document.getRootElement(); System.out.println(root.getName()); // 4 获取根元素下的全部一级子元素 List<Element> elements = root.elements("user"); for (Element element : elements){ System.out.println(element.getName()); } //5 获取当前元素下的某个子元素 Element people = root.element("people"); System.out.println(people.getText()); Element user = root.element("user"); System.out.println(user.elementText("name")); // 6、获取元素的属性信息呢? System.out.println(user.attributeValue("id")); Attribute id = user.attribute("id"); System.out.println(id.getName()); System.out.println(id.getValue()); List<Attribute> attributes = user.attributes(); for (Attribute attribute : attributes) { System.out.println(attribute.getName() + "=" + attribute.getValue()); } // 7、如何获取全部的文本内容:获取当前元素下的子元素文本值 System.out.println(user.elementText("name")); System.out.println(user.elementText("地址")); System.out.println(user.elementTextTrim("地址")); // 取出文本去除前后空格 System.out.println(user.elementText("password")); Element data = user.element("data"); System.out.println(data.getText()); System.out.println(data.getTextTrim()); // 取出文本去除前后空格 } } ```  ## 日志 - 程序中的日志,通常就是一个文件,里面记录的是程序运行过程中的各种信息。 > 日志技术 - 可以将系统执行的信息,方便的记录到指定的位置(控制台、文件中、数据库) - 可以随时以开关的形式控制日志的启停,无需侵入到源代码中去进行修改 > 日志的体系结构  - 日志框架:大佬或者第三方公司已经实现好的代码,后来者直接拿来使用即可 - 日志接口:设计日志框架的一套标准,日志框架需要实现这些接口 对Commons Logging接口不满意,有人就搞了SLF4J;因为对Log4j的性能不满意,有人就搞了Logback。 Logback是基于slf4j的日志规范实现的框架 ## logback日志框架 logback日志框架有以下几个板块 - logback-core:基础模板,是其他两个模板依赖的基础 - logback-classic:完整实现了slf4j API的模板 - logback-access:与tomcat、jetty等servlet容器集成,以提供http访问日志的功能 如果想要使用logback日志框架,至少需要在项目中整合三个模块:slf4j-API(日志接口),logback-core,logback-classic > 快速入门实现步骤 1、将logback框架复制到项目的lib目录中 slf4j-API(日志接口),logback-core,logback-classic 2、将logback框架的核心配置文件logback.xml直接拷贝到src目录下 3、创建logback框架提供的logger对象,然后用logger对象调用其提供的方法就可以记录系统的日志信息了 ```java public static final Logger LOGGER = LoggerFactory.getLogger(“类名"); ``` > demo ```java package com.xbxaq.xml_; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class LogBackTest { public static void main(String[] args) { // 1 创建一个logger日志对象 final Logger LOGGER = LoggerFactory.getLogger("LogBackTest"); //while (true) { try { LOGGER.info("chu法方法开始执行~~~"); chu(10, 1); LOGGER.info("chu法方法执行成功~~~"); } catch (Exception e) { e.printStackTrace(); LOGGER.error("chu法方法执行失败了,出现了bug~~~"); } //} } public static void chu(int a, int b){ int c = a / b; System.out.println(c); } } ```  ## 日志级别 - 日志级别指的是日志信息的类型,常见日志级别如下: | **日志级别** | **说明** | | ------------ | ------------------------------------------------------------ | | trace | 追踪,指明程序运行轨迹 | | debug | 调试,实际应用中一般将其作为最低级别,而 trace 则很少使用 | | info | 输出重要的运行信息,数据连接、网络连接、IO操作等等,使用较多 | | warn | 警告信息,可能会发生问题,使用较多 | | error | 错误信息, 使用较多 | 注意:只有日志的级别是大于或等于核心配置文件配置的日志级别,才会被记录,否则不记录。 **级别程度依次是:TRACE<DEBUG< INFO<WARN<ERROR** **默认级别是debug(忽略大小写),只输出当前级别及高于该级别的日志**
毛林
2025年9月7日 12:13
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码