当前位置: 首页 > news >正文

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

文章目录

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

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


一、特殊文件概述

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

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

二、Properties属性文件

2.1 文件特点
  • 后缀:.properties
  • 格式:key=value(每行一个键值对)
  • 注释:以#开头
  • 键不可重复,值可重复
  • 禁止行尾分号/空格(会被识别为值的一部分)
2.2 Properties类解析

在这里插入图片描述

// 读取属性文件
Properties prop = new Properties();
prop.load(new FileReader("config.properties"));// 获取值
String value = prop.getProperty("username");// 遍历所有键值对
方式1Set<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 写入属性文件

在这里插入图片描述

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">
    • 正确嵌套(禁止交叉嵌套)
  • 特殊字符处理
    <!-- 使用转义符 -->
    <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的步骤:

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

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):

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约束:简单数据类型限制
    <!ELEMENT student (name, age)> 表示student  标签下面只有 name和age 标签
    <!ELEMENT name (#PCDATA)>
    
  • Schema约束:支持复杂数据类型
    <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. 代码实现:
private static final Logger LOGGER = LoggerFactory.getLogger(类名);public static void main(String[] args) {LOGGER.debug("调试信息");LOGGER.info("业务操作记录");LOGGER.error("错误堆栈", exception);
}

在这里插入图片描述

4.3 日志配置文件logback.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记录运行日志等。

http://www.dtcms.com/a/274788.html

相关文章:

  • Linux中geoserver中文乱码
  • 离线环境二进制安装docker
  • uniapp获取状态栏高度,胶囊按钮的高度,底部安全区域的高度,自定义导航栏
  • [实战]调频三角波和锯齿波信号生成(完整C代码)
  • hbuilderx打包的应用上传苹果应用商店最简方法
  • 字节豆包又一个新功能,超级实用,4 种玩法,你肯定用得上!(建议收藏)
  • Uniapp视频聊天软件内容监控插件开发指南
  • OA系统中的搜索功能方案:简单搜索vs高级搜索
  • 2-Git提交本地项目到远程仓库
  • 问有几条病狗?
  • 【linux网络】深入理解 TCP/UDP:从基础端口号到可靠传输机制全解析
  • 机器学习-06(Optimization-自动调整学习率)
  • consul 的安装与服务发现
  • MOSS-TTSD V2版 - 文本到语音对话生成 支持零样本多人语音克隆 一键整合包下载
  • 一文速览DeepSeek-R1的本地部署——可联网、可实现本地知识库问答(附教程)
  • OBB旋转框检测配置与训练全流程(基于 DOTA8 数据集)
  • 第3章 操作臂运动学(笔记总结)
  • Hangfire 调用报错解决方案总结
  • 经典的垃圾收集器!!!
  • day02-数组part02
  • day67—DFS—被围绕的区域(LeetCode-130)
  • 飞算JavaAI 实战笔记
  • Qt中QGraphicsView类应用解析:构建高效2D图形界面的核心技术
  • 迭代器(c++)、智能指针
  • 【C/C++】动态内存分配:从 C++98 裸指针到现代策略
  • PyTorch武侠演义 第一卷:初入江湖 第1章:武林新秀遇Tensor - 张量基础
  • 技术突破与落地应用:端到端 2.0 时代辅助驾驶TOP10 论文深度拆解系列【第九篇(排名不分先后)】
  • 飞书CEO谢欣:挑战巨头,打造AI新时代的Office
  • Rail开发日志_6
  • Python类型注解中的`Optional`:深入理解难点解析(进阶版)