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记录运行日志等。

相关推荐
Scott9999HH7 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
腻害兔7 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
码智社8 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海8 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖9 小时前
JDK 26 新特性详解
java·开发语言
马优晨10 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
人邮异步社区11 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大12 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai12 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
维天说12 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json