点我

特殊文件-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 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

从文件中读取

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);
        });
    }
}

写入到文件中去

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中书写”<”、“&”等,可能会出现冲突,导致报错,此时可以用如下特殊字符替代。

    &lt;    <  小于
    &gt;    >  大于
    &amp;   &  和号
    &apos;  '  单引号
    &quot;  "  引号
    
应用场景
  • 作为系统的配置文件或者作为一种特殊的数据结构,在网络中进行传输

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
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()); // 取出文本去除前后空格
    }
}

image-20240330180427621

日志

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

image-20240330180903793

  • 日志框架:大佬或者第三方公司已经实现好的代码,后来者直接拿来使用即可
  • 日志接口:设计日志框架的一套标准,日志框架需要实现这些接口

对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对象调用其提供的方法就可以记录系统的日志信息了

public static final Logger LOGGER = LoggerFactory.getLogger(“类名");
demo
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);


    }
}

image-20240330184134252

日志级别

  • 日志级别指的是日志信息的类型,常见日志级别如下:
日志级别说明
trace追踪,指明程序运行轨迹
debug调试,实际应用中一般将其作为最低级别,而 trace 则很少使用
info输出重要的运行信息,数据连接、网络连接、IO操作等等,使用较多
warn警告信息,可能会发生问题,使用较多
error错误信息, 使用较多

注意:只有日志的级别是大于或等于核心配置文件配置的日志级别,才会被记录,否则不记录。

级别程度依次是:TRACE<DEBUG< INFO<WARN<ERROR

默认级别是debug(忽略大小写),只输出当前级别及高于该级别的日志

分类: JAVA

评论

-- 评论已关闭 --

目录