Java-特殊文件、日志技术

特殊文件

image-20230925152531352

.txt

普通文件.txt

普通的属性=文件、里面的内容可以随便写,格式随意

.properties

属性文件.properties

使用场景:存储多个用户的用户名、密码等情况

特点:

  1. 都只能是键值对
  2. 键不能重复
  3. 文件后缀一般是.properties结尾的
#这是注释
#属性文件的内容都是一些键值对信息,每行都是一个键值对
#属性文件的后缀:一般都是.properties结尾的
admin=123456
zhangsan=5dw6a1d6a

使用Properties读取.properties属性文件的键值对数据到内存中

image-20230925152809497

image-20230925152816647

import java.io.FileReader;
import java.util.Properties;
import java.util.Set;

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("day13-properties-xml-log-app\\src\\users.properties"));
        System.out.println(properties);

        //3.根据键取值
        System.out.println(properties.getProperty("张三"));
        System.out.println(properties.getProperty("王五"));

        System.out.println("-----------------");

        //4.遍历全部的键和值
        //a.根据Properties的特有方法stringPropertyNames
        Set<String> keys = properties.stringPropertyNames();
        for (String key : keys) {
            String value = properties.getProperty(key);
            System.out.println(key + "--->" + value);
        }
        System.out.println("-----------------");
        //b.根据Map的forEach
        properties.forEach((k,v) -> System.out.println(k + "--->" + v));
    }
}

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

image-20230925153154255

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("张三","zhangsan");
        properties.setProperty("李四","lisi");
        System.out.println(properties);

        //2.把properties对象中的键值对数据存入到属性文件中去
        properties.store(new FileWriter("day13-properties-xml-log-app\\src\\user2.properties"),"i saved many users!");
    }
}

.xml

XML文件.xml.(可扩展标记语言)

本质是一种数据的格式,可以用来存储复杂的数据结构,和数据关系

特点:

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

image-20230925153628808

使用场景:存储有关系的数据,作为系统的配置文件,或者作为一种特殊的数据结构,在网络中进行传输。例如存储多个用户的用户名、密码、家乡、性别等。

<?xml version="1.0" encoding="UTF-8" ?>
<!-- 注释:以上抬头声明必须放在第一行,必须有! -->
<!-- XML文件的后缀:一般都是.xml-->
<users>
    <user id = "1" desc = "abc">
        <name>张三</name>
        <sex></sex>
        <地址>翻斗花园</地址>
        <data> 3 &lt; 2 &amp;&amp; 5 > 4 </data>
        <data>
            <![CDATA[
                3 < 2 && 5 > 4
            ]]>
        </data>
    </user>
    <people>很多人</people>
    <user id = "2">
        <name>李四</name>
        <sex></sex>
        <地址>光明顶</地址>
    </user>
</users>

DOM4J解析XML文件的思想:文档对象模型

image-20230925153941023

image-20230925154019195

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.util.List;

public class Dome4JTest1 {
    public static void main(String[] args) throws Exception {
        //目标:掌握使用Dom4j框架解析XML文件

        //1.创建一个Dom4J框架提供的解析器对象
        SAXReader saxReader = new SAXReader();

        //2.使用saxReader对象把需要解析的XML文件读成一个Document对象
        Document document = saxReader.read("day13-properties-xml-log-app\\src\\helloworld.xml");

        //3.从Document文档对象中解析XML文件的全部数据
        Element root = document.getRootElement();//获得根元素
        System.out.println(root.getName());

        //4.获取根元素下的全部一级子元素
        List<Element> elements = root.elements();
        for (Element element : elements) {
            System.out.println(element.getName());
        }
        System.out.println("----------------");
        //传入字符串获取特定的一批子元素
        List<Element> users = root.elements("user");
        for (Element user : users) {
            System.out.println(user.getName());
        }
        System.out.println("-------------------");

        //5.获取当前元素下的某一个子元素
        Element people = root.element("people");
        System.out.println(people.getText());
        //如果当前元素下有很多子元素user,默认获取第一个
        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.print(attribute.getName() + " = ");
            System.out.println(attribute.getValue());
        }
        System.out.println("----------------------------");
        //7.如何获取全部的文本内容:获取当前元素下的子元素文本值
        System.out.println(user.elementText("name"));
        System.out.println(user.elementText("地址"));
        System.out.println(user.elementTextTrim("地址"));//去除文本前后空格

        Element data = user.element("data");
        System.out.println(data.getText());
        System.out.println(data.getTextTrim());//去除文本前后空格
    }
}

使用程序把数据写出到XML文件中去

不建议用dom4j来做,推荐直接把程序里的数据拼接成XML格式,然后用IO流写出去

这里只提供相应思路:

使用StringBuilder对象拼接字符串(注意\r\n换行),拼接完后调用toString()方法转成String类型的对象,使用输出流写出即可

日志技术

  • 可以将系统执行的信息,记录到指定的位置(控制台、文件中、数据库中),方便程序员定位bug、并了解程序的执行情况等
  • 可以随时以开关的形式控制日志的启停,无序侵入到源代码中去进行修改

image-20230925154636358

在此前我们记录日志一般都会使用输出语句展示在控制台,但这种方法存在许多弊端

image-20230925155104362

日志技术的体系结构

image-20230925155359518

其中Logback是我们最为常用的日志框架,Logback日志框架有以下几个模块:

image-20230925155545042

Logback快速入门

image-20230925155631425

核心配置文件logback.xml

image-20230925155841212

日志级别

image-20230925155906252

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值