Day17-【Java SE进阶】特殊文本文件、日志技术

news2025/1/10 14:01:47

一、特殊文本文件

在这里插入图片描述
为什么要用这些特殊文件?
存储多个用户的:用户名、密码
在这里插入图片描述
在这里插入图片描述

  • 存储有关系的数据,做为系统的配置文件
  • 做为信息进行传输

日志技术

  • 把程序运行的信息,记录到文件中,方便程序员定位bug、并了解程序的执行情况等

在这里插入图片描述

1. Properties

  • 是一个Map集合(键值对集合),但是我们一般不会当集合使用。
  • 核心作用:Properties是用来代表属性文件的,通过Properties可以读写属性文件里的内容

在这里插入图片描述

package com.file;

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

public class FileTest24 {
    public static void main(String[] args) throws IOException {
        Properties properties = new Properties();
        System.out.println(properties);
//        FileInputStream fileInputStream = new FileInputStream("day07/src/users.properties");
//        InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
//        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        FileReader fileReader = new FileReader("day07/src/users.properties");
        properties.load(fileReader);
        System.out.println(properties);
        System.out.println(properties.getProperty("sdf"));
        System.out.println(properties.getProperty("士大夫"));
        Set<String> strings = properties.stringPropertyNames();
        for (String string : strings) {
            String property = properties.getProperty(string);
            System.out.println(string+"->"+property);
        }
        properties.forEach((k,v)->{
            System.out.println(k+"->"+v);
        });
    };
}


2. XML(全称EXtensibleMarkupLanguage,可扩展标记语言)

特点:

  • 本质是一种数据的格式,可以用来存储复杂的数据结构,和数据关系。
  • XML中的“<标签名>”称为一个标签或一个元素,一般是成对出现的。
  • XML中只能有一个根标签。
  • XML中的标签可以有属性。
  • 如果一个文件中放置的是XML格式的数据,这个文件就是XML文件,后一般要写成.xml。

XML的创建
就是创建一个XML类型的文件,要求文件的后缀必须使用xml,如hello_world.xml
在这里插入图片描述
在这里插入图片描述
XML的作用和应用场景

  • 本质是一种数据格式,可以存储复杂的数据结构,和数据关系。
  • 应用场景:经常用来做为系统的配置文件;或者作为一种特殊的数据结构,在网络中进行传输。
    在这里插入图片描述
    解析XML文件
    使用程序读取XML文件中的数据
    在这里插入图片描述
    注意:程序员并不需要自己写原始的I0流代码来解析XML,难度较大!也相当繁琐!
    其实,有很多开源的,好用的,解析XML的框架,最知名的是:Dom4j(第三方研发的)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
package com.test;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.xml.sax.SAXException;

import java.util.List;
import java.util.function.Consumer;

public class XMLFileTest {
    public static void main(String[] args) throws SAXException, DocumentException {
        //1.创建一个Dom4j框架提供的解析器对象
        SAXReader saxReader = new SAXReader();

        //2.使用saxReader对象把需要解析的SML文件读成一个Document对象。
        Document read = saxReader.read("Day17\\src\\helloworld.xml");

        //3.从文档对象中解析XML文件的全部数据了
        Element rootElement = read.getRootElement();
        System.out.println(rootElement.getName());

        //4.获取根元素下的全部一级子元素
        List<Element> elements = rootElement.elements();
        List<Element> elements1 = rootElement.elements("user");
        elements.forEach(element->System.out.println(element.getName()));
        System.out.println("------");
        elements1.forEach(element->System.out.println(element.getName()));

        //5.获取当前元素下的某个子元素
        Element people = rootElement.element("people");
        System.out.println(people.getText());

        //6.如果下面有很多子元素user,默认获取第一个
        Element user = rootElement.element("user");
        String name = user.elementText("name");
        System.out.println(name);

        //7.获取元素的属性信息
        String id = user.attributeValue("id");
        System.out.println(id);
        Attribute id1 = user.attribute("id");
        System.out.println(id1.getName());
        System.out.println(id1.getValue());

        List<Attribute> attributes = user.attributes();
        attributes.forEach(attribute -> System.out.println(attribute.getName()+"="+attribute.getValue()));

        //8.获取全部的文本内容:获取当前元素下的子元素文本值
        String name1 = user.elementText("name");
        String address = user.elementText("address");
        Element data = user.element("Data");
        System.out.println(data.getText());
        System.out.println(data.getTextTrim());        //去除前后空格

    }
}

如何使用程序把数据写出到XL文件中去?
不建议用dom4j做
推荐直接把程序里的数据拼接成XML格式,然后用I流写出去!

package com.test;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class XMLTest1 {
    public static void main(String[] args) throws IOException {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("<?xml version=\"1.0\"encoding=\"UTF-8\"?>\r\n");
        stringBuilder.append("<user></user>\r\n");

        try(BufferedWriter bw = new BufferedWriter(new FileWriter("Day17\\src\\h.xml"));){
            bw.write(stringBuilder.toString());
        }catch (Exception e){
            e.printStackTrace();
        }

    }
}

什么是约束XML文件的书写?
就是限制XML文件只能按照某种格式进行书写
约束文档
专门用来限制xml书写格式的文档,比如:限制标签、属性应该怎么写。
约束文档的分类

  • DTD文档
  • Schema文档

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、日志技术

程序中的日志,通常就是一个文件,里面记录的是程序运行过程中的各种信息。
在这里插入图片描述

1. 日志技术

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:对Logback日志框架的控制,都是通过其核心配置文件logback.xml来实现的
核心配置文件logback.xml
对Logback日志框架进行控制的。
在这里插入图片描述
在这里插入图片描述

什么是日志级别?
日志级别指的是日志信息的类型,日志都会分级别,常见的日志级别如下(优先级依次升高):
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

代码块的理解

如果成员变量想要初始化的值不是一个硬编码的常量值&#xff0c;而是需要通过复杂的计算或读取文件、或读取运行环境信息等方式才能获取的一些值&#xff0c;该怎么办呢&#xff1f;此时&#xff0c;可以考虑代码块&#xff08;或初始化块&#xff09;。 代码块(或初始化块)的作…

Harmony创建Page省事小技巧

在创建Page页面时&#xff0c;选择ArkTS File时&#xff0c;创建的文件不会自动生成基础代码&#xff0c;也不会自动在main_page.json中自动进行注册&#xff0c;如何解决问题呢&#xff0c;其实很简单创建Page页面时选择Page项后就会创建Page文件&#xff0c;创建完的页面会自…

基于深度学习的铁轨缺陷检测系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)

摘要&#xff1a;本文深入研究了基于YOLOv8/v7/v6/v5的铁轨缺陷检测系统。核心技术上&#xff0c;文章采用了最先进的YOLOv8&#xff0c;并整合了YOLOv7、YOLOv6、YOLOv5算法&#xff0c;进行了性能指标的对比分析。文中详细阐述了国内外铁轨缺陷检测的研究现状、数据集处理方法…

封装一个vue3的公共组件

在Vue 3中&#xff0c;封装公共组件的场景包括但不限于以下几种情况&#xff1a; 重复使用的组件&#xff1a;如果你发现某个组件在多个地方重复使用&#xff0c;那么将其封装成公共组件是很有意义的。比如&#xff0c;页面中的各种表单控件&#xff08;输入框、下拉框、日期选…

超级AI大脑产品架构图解析

一、概述 超级AI大脑是一个集成了先进的人工智能技术&#xff0c;为用户提供全方位、智能化的服务的产品。其产品架构图设计旨在清晰展现其技术层次、功能模块与业务流程&#xff0c;以确保用户能够高效、便捷地利用该产品。 二、技术层次 基础设施层&#xff1a; 服务器&…

大模型学习笔记八:手撕AutoGPT

文章目录 一、功能需求二、演示用例三、核心模块流程图四、代码分析1&#xff09;Agent类目录创建智能体对象2&#xff09;开始主流程3&#xff09;在prompt的main目录输入主prompt和最后prompt4&#xff09;增加实际的工具tools 一、功能需求 目的 设计一个 Agent&#xff0c…

yolov8姿态识别与绘制

YOLOv8姿态检测是一种基于深度学习的计算机视觉技术&#xff0c;用于识别图像或视频中人体的姿态。作为YOLO系列算法的最新版本&#xff0c;YOLOv8在姿态检测任务上展现出了卓越的性能和效率。以下将详细介绍YOLOv8姿态检测的原理、特点、应用以及训练过程。 一、YOLOv8姿态检…

快消企业数字化转型实战解析:探寻未来增长新动力

2024年&#xff0c;快消行业正站在数字化转型的风口浪尖。 “今年是过去十年最差的一年&#xff0c;但却可能是未来十年最好的一年。”这句话几乎成为了今年的流行语。 但是这句话是情绪&#xff0c;不是事实。未来十年&#xff0c;中国会成为全球最大的消费品市场&#xff0…

CSS基础选择器 小案例复习(画三个小盒子)

&#xff08;大家好&#xff0c;前面我们学习了基础的选择器&#xff0c;俗话说&#xff1a;温故而知新。所以今天我们将通过小案例来复习前面学过的小知识点。另&#xff0c;十分感谢大家对我文章的支持❤️&#xff09; 通过这个案例复习两个地方&#xff1a; 类选择器的使用…

AJAX —— 学习(三)

目录 一、jQuery 中的 AJAX &#xff08;一&#xff09;get 方法 1.语法介绍 2.结果实现 &#xff08;二&#xff09;post 方法 1.语法介绍 2.结果实现 &#xff08;三&#xff09;通用型的 AJAX 方法 1.语法介绍 2.结果实现 二、AJAX 工具库 axios &#xff08;…

js 基础知识 forEach 和 map 的区别,及 map 不加 return 返回什么

问题一&#xff1a;forEach 和 map 之间的区别&#xff1a; 1、forEach 不返回新数组&#xff0c;map 返回新数组&#xff0c;其中包含回调函数的返回值。 2、用途&#xff1a;如果只想要遍历数组并对每个元素执行某些操作而不产生新数组&#xff0c;那么应该使用 forEach&am…

全网最强JavaWeb笔记 | 万字长文爆肝JavaWeb开发——day04_Maven入门

万字长文爆肝黑马程序员2023最新版JavaWeb教程。这套教程打破常规&#xff0c;不再局限于过时的老套JavaWeb技术&#xff0c;而是与时俱进&#xff0c;运用的都是企业中流行的前沿技术。笔者认真跟着这个教程&#xff0c;再一次认真学习一遍JavaWeb教程&#xff0c;温故而知新&…

ETL工具-nifi干货系列 第八讲 处理器PutDatabaseRecord 写数据库(详细)

1、本节通过一个小例子来讲解下处理器PutDatabaseRecord&#xff0c;该处理器的作用是将数据写入数据库。 如下流程通过处理器GenerateFlowFile 生成数据&#xff0c;然后通过处理器JoltTransformJSON转换结构&#xff0c;最后通过处理器PutDatabaseRecord将数据写入数据库。如…

软件架构风格_4.虚拟机体系结构风格

虚拟机体系结构风格的基本思想是人为构建一个运行环境&#xff0c;在这个环境之上&#xff0c;可以解析与运行自定义的一些语言&#xff0c;这样来增加架构的灵活性。虚拟机体系结构风格主要包括解释器风格和规则系统风格。 1.解释器体系结构风格 一个解释器通常包括完成解释工…

首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!

CodeGeeX是一款免费的智能编程助手。 继CodeGeeX在Visual Studio Code、JetBrains IDEs全家桶、HBuilderX、deepin-IDE等主流IDE中上线后&#xff0c;用户呼声最高的Visual Studio平台的适配插件产品也正式推出上线了&#xff01;成为首个适配Visual Studio平台的国产智能编程…

docker导出导入镜像

docker导出镜像 查看要导出的镜像 docker images主要有两列 REPOSITORY TAG 导出命令 导出公式 docker save -o xxxx.tar REPOSITORY:TAG例子 docker save -o minio.tar minio/minio:latestminio/minio:latest可以使用image id代替&#xff0c;但是使用image id会导致导…

笔记: JavaSE day15 笔记

第十五天课堂笔记 数组 可变长参数★★★ 方法 : 返回值类型 方法名(参数类型 参数名 , 参数类型 … 可变长参数名){}方法体 : 变长参数 相当于一个数组一个数组最多只能有一个可变长参数, 并放到列表的最后parameter : 方法参数 数组相关算法★★ 冒泡排序 由小到大: 从前…

基于springboot实现校园周边美食探索及分享平台系统项目【项目源码+论文说明】

基于springboot实现园周边美食探索及分享平台系统演示 摘要 美食一直是与人们日常生活息息相关的产业。传统的电话订餐或者到店消费已经不能适应市场发展的需求。随着网络的迅速崛起&#xff0c;互联网日益成为提供信息的最佳俱渠道和逐步走向传统的流通领域&#xff0c;传统的…

2024 ccfcsp认证打卡 2023 05 01 重复局面

2023 05 01 重复局面 题目题解1题解2区别&#xff1a;数据存储方式&#xff1a;时间复杂度&#xff1a;空间复杂度&#xff1a; 总结&#xff1a; 题目 题解1 import java.util.*;public class Main {public static void main(String[] args) {Scanner input new Scanner(Sys…

vivado eFUSE 寄存器访问和编程

eFUSE 寄存器访问和编程 注释 &#xff1a; 在 MPSoC 和 Versal 器件上不支持以下 eFUSE 访问和编程方法。 7 系列、 UltraScale 和 UltraScale 器件具有一次性可编程位用于执行特定功能 &#xff0c; 称为 eFUSE 位。不同 eFUSE 位类型如 下所述&#xff1a; • …