Java开发-特殊文本文件,日志技术

news2025/5/19 23:13:51

目录

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&lt;2&amp;&amp;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"));//1
        Attribute 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?

这些日志都可以解决

  • 日志就好比生活中的日记,可以记录你生活中的点点滴滴.
  • 程序中的日志,通常就是一个文件,里面记录的是程序运行过程中的各种信息

日志技术的体系

Logback日志框架的概述

Logback快速入门

核心配置文件logback.xml

logback设置日志级别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1715859.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JS 中怎么删除数组元素?有哪几种方法?

正文开始之前推荐一位宝藏博主免费分享的学习教程,学起来! 编号学习链接1Cesium: 保姆级教程+源码示例2openlayers: 保姆级教程+源码示例3Leaflet: 保姆级教程+源码示例4MapboxGL: 保姆级教程+源码示例splice() JavaScript中的splice()方法是一个内置的数组对象函数, 用于…

VM虚拟机共享文件夹fuse: bad mount point `/mnt/hgfs‘: No such file or directory

报错显示挂载点 /mnt/hgfs 不存在&#xff0c;你需要先创建这个目录。可以按照以下步骤进行操作&#xff1a; 创建挂载点目录&#xff1a; sudo mkdir -p /mnt/hgfs 手动挂载共享文件夹&#xff1a; sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other 确保每次启动时自动…

FFMPEG+ANativeWinodow渲染播放视频

前言 学习音视频开发&#xff0c;入门基本都得学FFMPEG&#xff0c;按照目前互联网上流传的学习路线&#xff0c;FFMPEGANativeWinodow渲染播放视频属于是第一关卡的Boss&#xff0c;简单但是关键。这几天写了个简单的demo&#xff0c;可以比较稳定进行渲染播放&#xff0c;便…

重庆耶非凡科技选品师项目大揭秘:成功背后的故事与经验

在电商行业迅猛发展的今天&#xff0c;选品师这一职业愈发受到市场的关注。重庆耶非凡科技有限公司凭借其专业的选品团队和科学的选品方法&#xff0c;成为众多商家关注的焦点。那么&#xff0c;该公司的选品师项目是否真的有成功的案例呢?接下来&#xff0c;我们将从多个角度…

备受推崇的公司文件加密文件推荐榜单

迄今为止&#xff0c;加密依然是最有效的用于保护数据、通讯安全的手段之一 在数字化时代&#xff0c;文件加密软件成为了保护个人和企业数据安全的重要工具。随着技术的不断进步&#xff0c;市场上涌现出了众多优秀的文件加密软件。 以下十款文件加密软件因其出色的性能、易…

STM32-12-OLED模块

STM32-01-认识单片机 STM32-02-基础知识 STM32-03-HAL库 STM32-04-时钟树 STM32-05-SYSTEM文件夹 STM32-06-GPIO STM32-07-外部中断 STM32-08-串口 STM32-09-IWDG和WWDG STM32-10-定时器 STM32-11-电容触摸按键 文章目录 1. OLED显示屏介绍2. OLED驱动原理3. OLED驱动芯片简介4…

企业电脑加密系统是如何发展的,今天最可靠的电脑加密系统是什么

企业电脑加密系统历经了几十年的发展&#xff0c;如今技术已经逐渐成熟&#xff0c;加密强度和防泄密效果越来越显著&#xff0c;那么它是怎么发展的&#xff0c;以及当今使用的加密技术是什么呢&#xff1f; 一、发展历程 1.早期探索阶段&#xff1a; 时间&#xff1a;上世纪…

python基础-数据结构-leetcode刷题必看-queue---队列-python的底层构建

文章目录 队列双端队列 deque底层存储deque接口1. __init__(self, iterable: Iterable[_T], maxlen: int | None None) -> None2. append(self, __x: _T) -> None3. appendleft(self, __x: _T) -> None4. copy(self) -> Self5. count(self, __x: _T) -> int6. …

增强团队建设和创造力的 6 个敏捷游戏

加入敏捷框架提供了对资源的访问和支持&#xff0c;可以帮助你的组织最大限度地发挥敏捷的优势。它还提供了一个与其他敏捷从业者联系的平台&#xff0c;以共享最佳实践并相互学习。 实践敏捷工作方法可以让团队按照自己的节奏&#xff0c;尽可能多地发挥创造力来追求目标&…

【408精华知识】关于存储系统,看这一篇就够了!

关于存储系统&#xff0c;其实是一个很完整的逻辑&#xff0c;在学完基础知识后&#xff0c;我们可以试着将整个存储系统的转化逻辑画下来&#xff0c;更形象化地去理解整个存储系统&#xff0c;如下图&#xff1a; 文章目录 &#xff08;一&#xff09;虚-->实&#xff08;…

Python面向对象学习笔记

Python面向对象编程 记录人&#xff1a; 李思成 时间&#xff1a; 2024/05/01至2024/05/23 课程来源&#xff1a; B站Python面向对象 1.面向对象编程概述 官方概述 程序是指令的集合&#xff0c;运行程序时&#xff0c;程序中的语句会变成一条或多条指令&#xff0c;然后…

算法练习——字符串

一确定字符串是否包含唯一字符 1.1涉及知识点 c的输入输出语法 cin>>s; cout<<"NO"; 如何定义字符串 切记&#xff1a;在[]中必须加数字——字符串最大长度&#xff0c;不然编译不通过 char s[101]; 如何获取字符串长度 char s[101];cin>>s;i…

Lua的几个特殊用法

&#xff1a;/.的区别 详细可以参考https://zhuanlan.zhihu.com/p/651619116。最重要的不同就是传递默认参数self。 通过.调用函数&#xff0c;传递self实例 通过 &#xff1a; 调用函数&#xff0c;传递self (不需要显示的传递self参数&#xff0c;默认就会传递&#xff0c;但…

STM32FLASH闪存

文章目录 前言首先来回顾一下存储器映像FLASH简介闪存模块组织Flash基本结构&#xff08;关系&#xff09;图Flash解锁使用指针访问存储器FLASH操作Flash全擦除Flash页擦除Flash写入 选项字节选项字节操作选项字节擦除选项字节写入 器件电子签名注意闪存控制寄存器一览 前言 本…

Bentham Science药学全文期刊库文献在家轻松下载

今天讲一个药学期刊库——Bentham Science药学全文期刊数据库 Bentham Science出版公司&#xff0c;作为全球范围内主要的制药、医疗、生物医学及化学出版商之一&#xff0c;出版期刊质量在全球享有广泛赞誉&#xff0c;其中有54种期刊被ISI收录&#xff0c;43%被PubMed收录&a…

Vue3 图片或视频下载跨域或文件损坏的解决方法

Vue3 图片或视频下载跨域或文件损坏的解决方法 修改跨域配置文件下载方法 修改跨域配置文件 修改vite.config.ts文件proxy里面写跨域地址&#xff0c;如下图&#xff0c;图片地址就是我们要跨域的目标地址&#xff1a; 下载方法 如下就是我取消上面那句后的报错 然后调用两…

「清新题精讲」CF249D - Donkey and Stars

更好的阅读体验 CF249D - Donkey and Stars Description 给定 n n n 个点 ( x i , y i ) (x_i,y_i) (xi​,yi​) 和 a , b , c , d a,b,c,d a,b,c,d&#xff0c;求出最多有多少个点依次连接而成的折线上线段的斜率在 ( a b , c d ) (\frac{a}{b},\frac{c}{d}) (ba​,dc​…

​代康伟的智慧引领,北汽蓝谷在新能源汽车市场的革新之路

在新能源汽车市场的浪潮中&#xff0c;北汽蓝谷以其独特的场景化造车理念&#xff0c;成为了行业的引领者。2023年&#xff0c;北汽蓝谷的极狐品牌在产品投放上明显加快&#xff0c;推出了多款基于场景化造车理念的新车&#xff0c;如极狐阿尔法S/T森林版和极狐汽车考拉等&…

huggingface的self.state与self.control来源(TrainerState与TrainerControl)

文章目录 前言一、huggingface的trainer的self.state与self.control初始化调用二、TrainerState源码解读(self.state)1、huggingface中self.state初始化参数2、TrainerState类的Demo 三、TrainerControl源码解读(self.control)总结 前言 在 Hugging Face 中&#xff0c;self.s…

力扣:226. 翻转二叉树

226. 翻转二叉树 已解答 简单 相关标签 相关企业 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1]示例 2&#xff1a; 输入&#xff1a…