【自用】JavaSE--特殊文件Properties與XML、日志技術

特殊文件

概述

使用特殊文件可以存儲多個有關系的數據,作為系統的配置信息

屬性文件類似于鍵值對,一一對應存儲數據(比如用戶名與密碼)

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 模…