day21——特殊文件:XML、Properties、以及日志框架

文章目录

      • 一、特殊文件概述
      • 二、Properties属性文件
        • [2.1 文件特点](#2.1 文件特点)
        • [2.2 Properties类解析](#2.2 Properties类解析)
        • [2.3 写入属性文件](#2.3 写入属性文件)
      • 三、XML文件详解
        • [3.1 XML核心特性](#3.1 XML核心特性)
        • [3.2 XML解析(Dom4J)](#3.2 XML解析(Dom4J))
        • [3.3 XML写入](#3.3 XML写入)
        • [3.4 XML约束(了解)](#3.4 XML约束(了解))
      • 四、日志技术(Logback)
        • [4.1 日志体系结构](#4.1 日志体系结构)
        • [4.2 Logback快速入门](#4.2 Logback快速入门)
        • [4.3 日志配置文件logback.xml](#4.3 日志配置文件logback.xml)
        • [4.4 日志级别](#4.4 日志级别)
      • 六、总结

在Java开发中,处理特殊文件、使用日志技术和实现多线程是必备的核心技能。本文将深入解析Properties属性文件、XML文件、Logback日志框架以及多线程的实现方式,结合理论讲解和代码示例,帮助开发者全面掌握这些关键技术。


一、特殊文件概述

普通文本文件(如.txt)缺乏结构化格式,不便于程序处理数据。而特殊文件通过预定义格式解决此问题:

  • Properties文件:键值对存储,常用于配置文件
  • XML文件:结构化数据存储,支持复杂关系
  • 核心学习目标:
    1. 理解文件特点与应用场景
    2. 掌握程序读写技术
    3. 日志记录与问题排查

二、Properties属性文件

2.1 文件特点
  • 后缀:.properties
  • 格式:key=value(每行一个键值对)
  • 注释:以#开头
  • 键不可重复,值可重复
  • 禁止行尾分号/空格(会被识别为值的一部分)
2.2 Properties类解析
java 复制代码
// 读取属性文件
Properties prop = new Properties();
prop.load(new FileReader("config.properties"));

// 获取值
String value = prop.getProperty("username");

// 遍历所有键值对
方式1:
 Set<String> keys = prop.stringPropertyNames();
        for (String key : keys) {
            String value = properties.getProperty(key);
            System.out.println(key + "---->" + value);
        }


方式2:
prop.forEach((k, v) -> System.out.println(k + " : " + v));
2.3 写入属性文件
java 复制代码
Properties prop = new Properties();
prop.setProperty("ip", "192.168.1.1");
prop.setProperty("port", "8080");

// 写入文件(第二个参数为注释)
prop.store(new FileWriter("server.properties"), "Server Config");

注意store()方法的注释参数必须非空


三、XML文件详解

3.1 XML核心特性
  • 文档声明 :首行固定格式
    <?xml version="1.0" encoding="UTF-8"?>

  • 单根标签:有且仅有一个根元素

  • 标签规则

    • 成对出现(<tag></tag>
    • 属性可自定义(<user id="1">
    • 正确嵌套(禁止交叉嵌套)
  • 特殊字符处理

    xml 复制代码
    <!-- 使用转义符 -->
    <data>3 &lt; 5</data>
    
    <!-- CDATA区避免转义 -->
    <code><![CDATA[if(a<b && c>d)]]></code>
3.2 XML解析(Dom4J)

步骤:

  1. 导入Dom4J的JAR包
  2. 创建SAXReader解析器
  3. 解析为Document对象

导入Dom4J的步骤:




java 复制代码
SAXReader reader = new SAXReader();
Document doc = reader.read("data.xml");

// 获取根元素
Element root = doc.getRootElement();

// 遍历子元素
List<Element> users = root.elements("user");
for (Element user : users) {
    String name = user.elementText("name");
    String id = user.attributeValue("id");
    System.out.println(id + ":" + name);
}
3.3 XML写入

推荐使用StringBuilder拼接(避免Dom4J复杂API):

java 复制代码
StringBuilder sb = new StringBuilder();
sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
sb.append("<books>\n");
sb.append("\t<book>\n");
sb.append("\t\t<title>Java Core</title>\n");
sb.append("\t</book>\n");
sb.append("</books>");

Files.write(Paths.get("books.xml"), sb.toString().getBytes());
3.4 XML约束(了解)
  • DTD约束 :简单数据类型限制

    dtd 复制代码
    <!ELEMENT student (name, age)> 表示student  标签下面只有 name和age 标签
    <!ELEMENT name (#PCDATA)>
  • Schema约束 :支持复杂数据类型

    xsd 复制代码
    <xs:element name="age" type="xs:integer"/>

四、日志技术(Logback)

4.1 日志体系结构

日志接口 SLF4J JCL Logback Log4j JUL

4.2 Logback快速入门

步骤:

  1. 导入三个JAR包:
    • slf4j-api.jar
    • logback-core.jar
    • logback-classic.jar
  2. 配置文件logback.xml放于src目录
  3. 代码实现:
java 复制代码
private static final Logger LOGGER = 
    LoggerFactory.getLogger(类名);

public static void main(String[] args) {
    LOGGER.debug("调试信息");
    LOGGER.info("业务操作记录");
    LOGGER.error("错误堆栈", exception);
}
4.3 日志配置文件logback.xml

核心配置项:

xml 复制代码
<!-- 输出到控制台 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>

<!-- 输出到文件 -->
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>app.log</file>
    <encoder>
        <pattern>%date %level [%thread] %logger{10} %msg%n</pattern>
    </encoder>
</appender>

<!-- 设置日志级别 level="INFO" 表示只记录info级别和info级别以上的日志-->
<root level="INFO">
    <appender-ref ref="CONSOLE"/>
    <appender-ref ref="FILE"/>
</root>
4.4 日志级别

优先级从低到高:

复制代码
TRACE < DEBUG < INFO < WARN < ERROR
  • 仅输出≥配置级别的日志
  • 配置level="WARN"时,只记录WARN和ERROR日志

六、总结

  1. Properties文件:轻量级键值对存储,适合简单配置
  2. XML文件
    • 结构化数据存储
    • Dom4J解析标准
    • 注意特殊字符处理
  3. 日志技术
    • Logback为核心框架
    • 通过配置文件控制输出目标与级别

掌握这些技术能显著提升程序健壮性、可维护性和执行效率。在实际开发中,建议根据需求灵活组合使用,如用Properties管理配置、Logback记录运行日志等。

相关推荐
goTsHgo1 分钟前
Spring XML 配置简介
xml·java·spring
青柠编程4 分钟前
基于 Spring Boot 的医疗病历信息交互平台架构设计
java·spring boot·后端
半导体守望者9 分钟前
TR帝尔编码器GSD文件 PROFIBUS XML PROFINET EtherCAT 文件 ADH CDH CMV等
xml·经验分享·笔记·机器人·自动化·制造
极光雨雨10 分钟前
XML中的 CDATA mybaitis xml中的 <![CDATA[ xxxx ]]>
xml
专注代码七年21 分钟前
IDEA JVM优化配置idea64.vmoptions - 保守兼容版本 兼容IDEA 2023.3.6版本【亲测可用】
java·jvm·intellij-idea
疯癫的老码农35 分钟前
【word解析】Java文件解析问题排查:无法找到OMML2MML.xsl的IO异常解析
java·开发语言·spring boot·spring·maven
路弥行至1 小时前
C语言入门教程 | 第一讲:C语言零基础入门教程:第一个程序到变量运算详解
c语言·开发语言·经验分享·笔记·单片机·其他·课程设计
beijingliushao1 小时前
86-python电网可视化项目-6
开发语言·python·信息可视化·数据可视化
songx_991 小时前
leetcode(填充每个节点的下一个右侧节点指针 II)
java·数据结构·算法·leetcode
chenyuhao20241 小时前
vector深度求索(上)实用篇
开发语言·数据结构·c++·后端·算法·类和对象