【使用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.mzph.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…