【使用apache snakeyaml 管理yml文件】

使用apache snakeyaml 管理yml文件

  • 1. 一個Yaml工廠
  • 2.Yaml工具類
  • 3. 測試類
  • 4. 完成 ! OK

1. 一個Yaml工廠

public class YamlFactory {public static YamlUtil get(){return new YamlUtil();}
}

2.Yaml工具類

@Slf4j
public class YamlUtil {private Yaml yaml;public YamlUtil() {yaml = new Yaml(new Representer() {@Overrideprotected NodeTuple representJavaBeanProperty(Object javaBean, Property property, Object propertyValue,Tag customTag) {return propertyValue == null ? null: super.representJavaBeanProperty(javaBean, property, propertyValue, customTag);}});}public <T> T loadAs(String yaml, Class<T> type) {return this.yaml.loadAs(yaml, type);}public boolean write(Object obj, String path) {try (Writer writer = this.writer(path)) {this.dump(obj, writer);} catch (IOException e) {log.error("寫入文件【{}】失敗!", path);return false;}return true;}public boolean yamlFile(@NonNull Object obj, @NonNull String path) {try (Writer writer = this.writer(path)) {String yamlStr = this.yaml.dumpAsMap(obj);writer.write(yamlStr);writer.flush();log.info("寫入文件: success, 文件路徑:【{}】 ", path);} catch (IOException e) {log.error("寫入文件: failed, 文件路徑:【{}】 ", path);return false;}return true;}private void dump(Object obj, Writer writer) {this.yaml.dump(obj, writer);}private Writer writer(String path) {try {File file = new File(path);if (!file.exists()) {file.createNewFile();}return new PrintWriter(file);} catch (IOException e) {throw new RuntimeException(e);}}
}

3. 測試類

public class Test {public static void main1(String[] args) throws IOException {//String yamlStr = "name: John\nhobby:\n  - A\n  - B\n  - C\nscores:\n  chinese: 66\n  math: 61";//Me me = yaml.loadAs(yamlStr, Me.class);//System.out.println(me);ArrayList<String> hobby = new ArrayList<>();hobby.add("唱歌");hobby.add("跳舞");hobby.add("跑步");hobby.add("畫畫");HashMap<String, String> scores = new HashMap<>();scores.put("語文","88");scores.put("數學","91");scores.put("英語","56");ArrayList<Parent> parents = new ArrayList<>();parents.add(new Parent("111","mather"));parents.add(new Parent("222","father"));Me me_ = new Me("John", hobby, scores,parents);String filePath = "D:/test.yml";YamlFactory.get().yamlFile(me_,filePath);}public static void main(String[] args) {String path = "";//YamlFactory.get().yamlFile()}
}
@Data
@AllArgsConstructor
class Me{public String name;public List<String> hobby;public Map<String ,String> scores;public List<Parent> parents;
}@Data
@AllArgsConstructor
class Parent {public String name;public String role;
}

4. 完成 ! OK

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/213405.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213405.shtml
英文地址,請注明出處:http://en.pswp.cn/news/213405.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

想進階JAVA高級程序員嗎?多線程必學

??作者主頁&#xff1a;小虛竹 ??作者簡介&#xff1a;大家好,我是小虛竹。2022年度博客之星評選TOP 10&#x1f3c6;&#xff0c;Java領域優質創作者&#x1f3c6;&#xff0c;CSDN博客專家&#x1f3c6;&#xff0c;華為云享專家&#x1f3c6;&#xff0c;掘金年度人氣作…

【SpringSecurity】-- 認證、授權

文章目錄 SpringSecurity簡介快速入門1.準備工作1.2引入SpringSecurity 認證1.登錄校驗流程2.原理2.1SpringSecurity完整流程2.2認證流程詳解 3.解決問題3.1思路分析3.2準備工作3.3.實現3.3.1數據庫校驗用戶3.3.2密碼加密存儲3.3.3登錄接口3.3.4認證過濾器3.3.5退出登錄 授權1.…

輸入一組數據,以-1結束輸入[c]

我們新手寫題時總能看到題目中類似這樣的輸入 沒有給固定多少個數據&#xff0c;我們沒有辦法直接設置數組的元素個數&#xff0c;很糾結&#xff0c;下面我來提供一下本人的方法&#xff08;新手&#xff0c;看到有錯誤或者不好的地方歡迎大佬指出&#xff0c;糾正&#xff0…

c語言中的 *, , ** 符合代表什么意思

在C語言中&#xff0c;“&”主要有兩個用途。 取地址運算符&#xff1a;C語言中&#xff0c;"&"用來返回一個變量的內存地址。例如&#xff0c;假設我們定義了一個整數變量 int a 10;&#xff0c;那么 &a 就代表了這個變量所在的內存地址。 位運算符&a…

【開源】基于Vue和SpringBoot的衣物搭配系統

項目編號&#xff1a; S 016 &#xff0c;文末獲取源碼。 \color{red}{項目編號&#xff1a;S016&#xff0c;文末獲取源碼。} 項目編號&#xff1a;S016&#xff0c;文末獲取源碼。 目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、研究內容2.1 衣物檔案模塊2.2 衣物搭配模塊2.3 衣…

HarmonyOS鴻蒙操作系統架構開發

什么是HarmonyOS鴻蒙操作系統&#xff1f; HarmonyOS是華為公司開發的一種全場景分布式操作系統。它可以在各種智能設備&#xff08;如手機、電視、汽車、智能穿戴設備等&#xff09;上運行&#xff0c;具有高效、安全、低延遲等優勢。 目錄 HarmonyOS 一、HarmonyOS 與其他操…

CRM系統的這些功能助您高效管理客戶

客戶管理可以理解為企業收集并利用客戶信息&#xff0c;滿足客戶的需求&#xff0c;從而提升客戶價值的過程。CRM系統一直被譽為客戶管理的“神器”&#xff0c;下面我們就來說說CRM系統有哪些功能可以管理客戶&#xff1f; 1、客戶信息管理 CRM可以幫助企業收集客戶的基本信…

C++ Qt開發:如何使用信號與槽

在Qt中&#xff0c;信號與槽&#xff08;Signal and Slot&#xff09;是一種用于對象之間通信的機制。是Qt框架引以為傲的一項機制&#xff0c;它帶來了許多優勢&#xff0c;使得Qt成為一個強大且靈活的開發框架之一。信號與槽的關聯通過QObject::connect函數完成。這樣的機制使…

Leetcode 2957. Remove Adjacent Almost-Equal Characters

Leetcode 2957. Remove Adjacent Almost-Equal Characters 1. 解題思路2. 代碼實現 題目鏈接&#xff1a;2957. Remove Adjacent Almost-Equal Characters 1. 解題思路 這一題其實不是很想放上來的&#xff0c;因為其實真的很簡單&#xff0c;但是我驚訝地發現當前提交的算法…

【EI會議征稿】第三屆光學與機器視覺國際學術會議(ICOMV 2024)

第三屆光學與機器視覺國際學術會議(ICOMV 2024) 2024 3rd International Conference on Optics and Machine Vision 第三屆光學與機器視覺國際學術會議(ICOMV 2024)將于2024年1月19-21日在中國南昌舉行。本次會議將圍繞“光學”與"機器視覺”等研究領域展開討論&#xf…

kmp算法超詳細

在計算機科學中&#xff0c;字符串匹配是一個常見的問題。給定一個文本串和一個模式串&#xff0c;我們需要在文本串中找到所有與模式串匹配的位置。傳統的字符串匹配算法如暴力匹配&#xff08;Brute Force&#xff09;方法在最壞情況下的時間復雜度為O(m*n)&#xff0c;其中m…

Java實現minio

配置Dapplication.yml minio:access-key: minioadminsecret-key: minioadminbucket-name: file #指定桶名稱endpoint: http://localhost:9000 實現代碼minioContriller.java package com.setsail.setsailcusserver.controller;import com.alibaba.fastjson.JSONObject; impo…

萬界星空科技五金家具行業MES解決方案

MES系統如何與家具企業生產相匹配&#xff1f;相較于其它大多數工業軟件&#xff0c;MES系統無疑是受企業歡迎的軟件之一。MES系統處于制造生產企業信息化的核心領域&#xff0c;有著承上啟下的作用。那MES系統如何與家具企業生產相匹配&#xff1f; 五金家具行業的工藝特點&am…

最簡單的pixel刷機和安裝面具、lsposed

一 下載手機對應的系統 1&#xff0c;手機usb連接然后重啟進入Fastboot模式&#xff1a;adb reboot bootloader2&#xff0c;找到你下載的系統&#xff0c;Windows 系統 直接運行 flash-all.bat上圖 &#xff1a;左邊就是安卓11和12的系統&#xff0c;右邊是對應的手機型號 下…

mysql:修改整數字段的顯式長度不生效

例如&#xff0c;我使用mysql 8.2.0版本&#xff0c;想修改整數字段的顯式長度&#xff0c;不會生效&#xff0c;提醒整數的顯示長度已經廢棄&#xff0c;會在將來某個版本去掉&#xff1a; mysql官網中也有說明&#xff1a; https://dev.mysql.com/doc/refman/8.2/en/numeric…

帶阻濾波器:原理、應用及性能分析?|深圳比創達電子EMC

在現代電子技術和通信領域中&#xff0c;濾波器是一種常見的電路元件&#xff0c;用于處理信號&#xff0c;去除不需要的頻率成分或者增強感興趣的頻率成分。本文將重點探討帶阻濾波器&#xff0c;它是一種特殊類型的濾波器&#xff0c;具有在特定頻率范圍內抑制信號的功能。我…

SSD自己也能復制粘貼?淺談NVMe 2.0 Copy Command命令

復制粘貼&#xff08;CtrlC/V&#xff09;作為現代打工人日常辦公的必備生存技能&#xff0c;想必大家都非常熟悉。但你知道嗎&#xff0c;其實SSD自身也能進行這個非常實用的操作。可能有的讀者要說了&#xff1a;這有什么稀奇&#xff0c;復制粘貼這么簡單的功能&#xff0c;…

騰訊字節常考的linux命令

1 ps 1.1 ps -ef 有哪些字段 ps -ef 命令在Unix/Linux系統中用于顯示當前運行的進程。輸出的字段通常包括&#xff1a; UID&#xff1a;啟動進程的用戶ID。PID&#xff1a;進程ID。PPID&#xff1a;父進程ID。C&#xff1a;CPU利用率。STIME&#xff1a;進程啟動時間。TTY&a…

安卓上比iOS快捷指令更強大的工具——MacroDroid

使用 MacroDroid (Android) 自動化您的日常生活——一個簡單的自動化應用程序&#xff0c;用于在 Android 上自動執行任務以及如何在其上自動執行任務。 iOS 和 Android 之間的區別? iOS和Android是兩種不同的移動操作系統&#xff0c;iOS由蘋果公司開發&#xff0c;于2007年…

conda配環境問題合集

&#xff08;CtrlF&#xff0c;請&#xff09; 問題&#xff1a; File "F:\Anaconda3\envs\YOLOv5\lib\ssl.py", line 773, in __init__ raise ValueError("check_hostname requires server_hostname") ValueError: check_hostname requires server_h…