特殊文件

概述

使用特殊文件可以存储多个有关系的数据,作为系统的配置信息

属性文件类似于键值对,一一对应存储数据(比如用户名与密码)

XML文件存储多个用户的多个属性更适合,适合存储更复杂的数据

Properties

注:这个属性文件的后缀即使不是properties也没关系,无所谓后缀,只要文件内容都是键值对,就可以使用Properties

读取Properties

示例代码:

public class test {public static void main(String[] args) {//创建properties对象Properties properties = new Properties();try (//创建输入流管道Reader rd = new FileReader("properties-XML-log\\src\\com\\CJ\\Proerties\\user.properties")){//将properties文件中的数据传到创建的properties对象中去properties.load(rd);System.out.println(properties);System.out.println(properties.getProperty("小陈"));//通过键找值//遍历全部值System.out.println("遍历全部键值对:");Set<String> set = properties.stringPropertyNames();//将所有键存到集合中for(String name : set){System.out.println("用户名:"+name+" 密码:"+properties.getProperty(name));System.out.println("----------");}//forEach方法遍历properties.forEach((k,v)->{System.out.println(k+":"+v);});} catch (Exception e) {e.printStackTrace();}}
}

写出Properties

示例:

案例

看看user属性文件中是否有大黑牛,有的话将他的密码改成233,没有的话就算了

public class test {public static void main(String[] args){try{String FILE_PATH = "properties-XML-log\\src\\com\\CJ\\Proerties\\user.properties";//文件路径Properties properties = new Properties();//创建对象properties.load(new FileReader(FILE_PATH));//将文件加载到对象中if(properties.containsKey("大黑牛")) {  //由于properties也属于map集合,因此可以使用map自带的containsKeyproperties.setProperty("大黑牛","233");//在对象中修改properties.store(new FileWriter(FILE_PATH),"修改成功");//写回属性文件System.out.println("修改完成!");}else System.out.println("没有找到大黑牛");} catch (Exception e) {e.printStackTrace();}}
}

注意:所有输出流在创建时默认都会清空文件(需要加上append才是追加),因此在面对需要修改文件的操作时要注意创建输出流的时间

XML

XML的创建

重点是后缀为  .xml

语法规则

 一定要有xml抬头声明,且放在第一行,如下图

用数据区挺不错的,可读性好

应用场景

读取XML中的数据

如果自己手写IO流代码来解析XML,难度相当大且繁琐

推荐使用开源的XML框架,最知名的是:Dom4j(第三方研发)

引入框架方法如下:

Dom4j的思想

常见方法

XML解析思想:自上而下,先拿文档,通过文档拿到根元素,通过根元素拿子元素,一级一级解析

案例:

public class test {public static void main(String[] args) throws Exception {//获得saxReader解析器SAXReader saxReader = new SAXReader();//通过解析器将xml读成document文档(会有异常,应该是怕你写到地址不对,抛出即可)Document document = saxReader.read("properties-XML-log\\test.xml");//获取根元素Element root = document.getRootElement();System.out.println(root.getName());//打印出根元素的名字看一下//通过根元素获取子元素,将所有子元素放入list中List<Element> elements = root.elements();for(Element e : elements){   //遍历所有子元素,即userList<Attribute> attributes = e.attributes();//获取当前遍历到user的全部属性,放入listSystem.out.print(e.getName()+":");for(Attribute a : attributes){  //通过遍历打印出全部属性System.out.print(a.getName()+"="+a.getText()+" ");}System.out.println();List<Element> es = e.elements();   //将当前遍历到user的全部信息放入listfor(Element e1 : es){    //将当前user的所有信息打印出来System.out.println(e1.getName()+":"+e1.getText());}System.out.println("---------");}}
}

运行结果:

XML的生成

不建议使用Dom4j,较繁琐

推荐直接把程序里的数据拼接成XML格式,然后使用IO流写出去

示例:

public class test {public static void main(String[] args){//使用StringBuffer进行拼接StringBuffer sb = new StringBuffer();sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n");sb.append("<book>\n");sb.append("\t<name>").append("假如我是一头大肥猪").append("</name>\r\n");sb.append("\t<author>").append("小肥猪").append("</author>\r\n");sb.append("\t<price>").append(19.9).append("</price>\r\n");sb.append("</book>");//采用IO流将他输出到外部文件try (BufferedWriter bw = new BufferedWriter(new FileWriter("properties-XML-log\\output.xml"))){bw.write(sb.toString());} catch (Exception e) {e.printStackTrace();}}
}

运行结果:

约束XML的编写(了解)

XML的约束就是限制XML文件只能按照某种格式进行书写

因此就需要用到约束文档,如DTD文档与Schema文档,如果不按照限制的要求来编写,就会出问题

DTD约束文档

缺点是不能约束具体数据类型,比如下面案例中的售价就算写我是一头大肥猪也没事

案例:

Schema约束文档

案例:

日志技术

概述

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

程序中的日志通常是一个文件,用来记录程序运行过程中的各种信息

之前学习中记录日志的方案:

之后要学习的日志技术的优点:

日志技术的体系

注:日志框架都是按照日志接口的标准来设计的,降低程序员学习成本

Logback日志框架

Logback快速入门

使用日志技术必须的操作:

logback.xml 一般是不用自己写,也不需要理解,稍微了解一下即可

温故知新:final关键字 --> 修饰变量时只能为其赋值一次,不能再赋值        

日志使用示例如下图,每次执行都会记录,我执行力两次

可以用info表示重要时间,erro表示错误,debug表示程序调试

核心配置文件logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration><!--CONSOLE :表示当前的日志信息是可以输出到控制台的。--><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><!--输出流对象 默认 System.out 改为 System.err--><target>System.out</target><encoder><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level]  %c [%thread] : %msg%n</pattern></encoder></appender><!-- File是输出的方向通向文件的 --><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern><charset>utf-8</charset><!--输出的文件的编码方式--></encoder><!--日志输出路径--><file>D:/AJava/code/javasepro/log_test/src/log_test.log</file><!--指定日志文件拆分和压缩规则--><!--不采取拆分压缩,当执行力很久之后日志就会变得很大很大,浪费空间--><rollingPolicyclass="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!--通过指定压缩文件名称,来确定分割文件方式--><!--当日志文件达到指定的文件拆分大小后,就采用下行的规则进行拆分--><fileNamePattern>D:/AJava/code/javasepro/log_test/src/log_test-%i-%d{yyyy-MM-dd}-.log.gz</fileNamePattern><!--文件拆分大小--><maxFileSize>1MB</maxFileSize></rollingPolicy></appender><!--1、控制日志的输出情况:如,ALL开启日志,OFF取消日志--><root level="debug"><appender-ref ref="CONSOLE"/><appender-ref ref="FILE" /></root>
</configuration>

Logback设置日志级别

AI给出的记录范围:

注:

  • 大多数日志框架(如 SLF4J/Logback)不区分 FATAL,错误统一归为 ERROR
  • 支持FATAL的框架(如 Log4j 2)会将其视为比ERROR更严重的独立级别。

设置成 info 示例:

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中本聪思想与Web3的困境:从理论到现实的跨越

一、中本聪思想的核心精髓中本聪通过比特币白皮书提出的核心思想&#xff0c;可归纳为三大支柱&#xff1a;去中心化货币体系目标&#xff1a;摆脱中央机构控制&#xff0c;避免通货膨胀和政治干预&#xff08;如2008年金融危机暴露的中心化风险&#xff09;。实现路径&#xf…

Centos 用户管理

一.创建用户 在 root账户 或 sudo 权限下 1. 创建用户 useradd xiaoyangzi2.为该用户设置密码或修改密码 passwd xiaoyangzi3. 将用户加入wheel用户组 在 CentOS 中&#xff0c;属于 wheel 组的用户默认可以使用 sudo 权限。 查看所属用户组: groups xiaoyangzi将 xiaoyangzi 加…

C++枚举算法习题

1. 3的倍数枚举&#xff08;基础&#xff09;题目&#xff1a;在之间有10和50多少个数是3的倍数&#xff1f;列举这些数。 解析&#xff1a;枚举10到50之间的数&#xff0c;判断是否能被3整除。优化&#xff1a;计算第一个≥10的3的倍数&#xff08;1234&#xff09;&#xff0…

【SpringBoot系列-01】Spring Boot 启动原理深度解析

【SpringBoot系列-01】Spring Boot 启动原理深度解析 大家好&#xff01;今天咱们来好好聊聊Spring Boot的启动原理。估计不少人跟我一样&#xff0c;刚开始用Spring Boot的时候觉得这玩意儿真神奇&#xff0c;一个main方法跑起来就啥都有了。但时间长了总会好奇&#xff1a;这…

windows环境下使用vscode以及相关插件搭建c/c++的编译,调试环境

windows下使用vscode搭建c/c的编译、运行、调试环境&#xff0c;需要注意的是生成的是xxx.exe可执行文件。另外使用的编译器是mingw&#xff0c;也就是windows环境下的GNU。 我参考的网址是&#xff1a;https://zhuanlan.zhihu.com/p/1936443912806962622 文章分为2种环境搭建…

标准瓦片层级0~20,在EPSG:4326坐标系下,每个像素点代表的度数

在 EPSG:4326&#xff08;WGS84经纬度坐标系&#xff09; 下&#xff0c;瓦片层级&#xff08;Zoom Level&#xff09;的分辨率以 度/像素 为单位&#xff0c;其计算遵循 TMS Global Geodetic 规范&#xff08;单位&#xff1a;度&#xff09;。以下是 标准层级 0 至 20 的分辨…

Unity高级剔除技术全解析

目录 ​编辑层级剔除&#xff08;Layer Culling&#xff09;原理详解 代码示例 业务应用场景 距离剔除&#xff08;Distance Culling&#xff09;技术细节 进阶实现 开放世界优化技巧 视口裁剪&#xff08;Viewport Culling&#xff09;多摄像机协作方案 高级应用场景 …

[Linux] Linux文件系统基本管理

目录 识别文件系统和设备 Linux 中设备 Linux 文件系统 查看设备和文件系统 lsblk命令 df命令 du命令 案例&#xff1a;查看根文件系统中哪个文件占用了最大空间 环境准备 查找过程 挂载和卸载文件系统 环境准备 挂载文件系统 卸载文件系统 卸载失败处理 lsof …

如何在 Ubuntu 24.04 Server 或 Desktop 上安装 XFCE

在 Ubuntu 24.04 上更改当前桌面环境或添加新的桌面环境并不是一项艰巨的任务。大多数流行的 Linux 桌面环境,包括 XFCE,都可以通过默认的 Ubuntu 24.04 LTS 系统仓库安装。在本教程中,我们将学习如何使用 Tasksel 工具在 Ubuntu Linux 上安装和配置 XFCE。 访问终端并运行…

linux下用c++11写一个UDP回显程序

需求&#xff1a;1&#xff09;从2个UDP端口接收数据&#xff0c;并在同样的端口回显。echo2&#xff09;多个处理线程&#xff0c;多个发送线程&#xff1b;3&#xff09;使用条件变量唤醒&#xff1b;#include <stack> #include <mutex> #include <atomic>…

MySQL 深分页优化与条件分页:把 OFFSET 换成“游标”,再用覆盖索引抄近路

MySQL 深分页优化与条件分页:把 OFFSET 换成“游标”,再用覆盖索引抄近路 这不是“玄学调优”,而是可复制的方案。本文用可复现的 DDL/造数脚本,演示为什么 OFFSET 越大越慢,如何用 条件游标(Keyset Pagination) 替换它,并配上 覆盖索引。还会教你看 EXPLAIN/EXPLAIN A…

Unity 绳子插件 ObjRope 使用简记

Unity 绳子插件&#xff0c;是一个基于物理的、高度逼真且可交互的绳索模拟解决方案。 其性能良好&#xff0c;能够运行在小游戏平台。 一、插件基本 插件资源商店地址&#xff1a; Obi Rope | Physics | Unity Asset Store 官方文档&#xff08;手册&#xff09;&#xff…

demo 通讯录 + 城市选择器 (字母索引左右联动 ListItemGroup+AlphabetIndexer)笔记

一、城市选择器实现笔记1. 双层 for 循环渲染数据结构interface BKCityContent {initial: string; // 字母索引cityNameList: string[]; // 城市列表 }核心实现// 外层循环&#xff1a;字母分组 - 遍历城市数据&#xff0c;按字母分组显示 ForEach(this.cityContentList, (item…

【总结型】c语言中的位运算

位运算包括 & | ^ ~ << >>按位与 将某些变量中的某些位清0同时保持其他位不变。也可以用来获取变量中的某一位。 例如&#xff1a;将int型变量n低8位全置为0&#xff0c;其余位保持不变。 n n & 0xffffff00 如何判断一个int型变量n的第七位。 n & 0x8…

如何在FastAPI中玩转APScheduler,实现动态定时任务的魔法?

url: /posts/4fb9e30bb20956319c783e21897a667a/ title: 如何在FastAPI中玩转APScheduler,实现动态定时任务的魔法? date: 2025-08-16T01:14:26+08:00 lastmod: 2025-08-16T01:14:26+08:00 author: cmdragon summary: APScheduler是Python中强大的任务调度库,支持任务持久化…

GitHub的简单使用方法----(5)

最后一篇简单讲讲git管理远程仓库 1.目的 备份&#xff0c;实现代码共享集中化管理 &#xff08;将本地仓库同步到git远程仓库中&#xff09; git clone 仓库地址 以下图为示例&#xff0c;我打开了一个别人的项目仓库&#xff0c;点击code能看到仓库地址 等待完成即可 如…

C++ STL-string类底层实现

摘要&#xff1a; 本文实现了一个简易的string类&#xff0c;主要包含以下功能&#xff1a; 1. 默认成员函数&#xff1a;构造函数&#xff08;默认/参数化&#xff09;、拷贝构造、赋值重载和析构函数&#xff0c;采用深拷贝避免内存问题&#xff1b; 2. 迭代器支持&#xff1…

【LeetCode每日一题】

每日一题3. 无重复字符的最长子串题目总体思路代码1.两数之和题目总体思路代码15. 三数之和题目总体思路代码2025.8.153. 无重复字符的最长子串 题目 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3…

sharding-jdbc读写分离配置

一主两从&#xff0c;爆红是正常的&#xff0c;不知为啥 spring:shardingsphere:datasource:names: ds_master,ds_s1,ds_s2ds_master:type: com.zaxxer.hikari.HikariDataSourcedriverClassName: com.mysql.jdbc.DriverjdbcUrl: jdbc:mysql://192.168.135.100:3306/gmall_produ…

【大模型核心技术】Dify 入门教程

文章目录一、Dify 是什么二、安装与部署2.1 云端 SaaS 版&#xff08;快速入门&#xff09;2.2 私有化部署&#xff08;企业级方案&#xff09;三、界面导航与核心模块3.1 控制台概览3.2 核心功能模块详解3.2.1 知识库&#xff08;RAG 引擎&#xff09;3.2.2 工作流编排3.2.3 模…