SnakeYAML配置文件解析器
序言
实际开发项目中会有好多的配置文件,有yml后缀的配置文件,也有properties后缀的配置文件,xml、ini、conf、yaml等等。使用时大多都会经过加载解析的过程。
那么如果自己想要加载一个yaml文件的数据怎么做呢?
springboot框架中我们可以通过@Value("${}")注解加载配置文件中的对象、数组或纯量(scalars)。
下面看看如何使用SnakeYAML解析配置文件,
实战
创建一个test.yaml文件在resources目录下,
field1: "String"
field2: 2
properties:name: "my Test"age: 13
创建自己的实例对象类MyInstance
package com.hust.zhang.yaml;import lombok.Data;
import java.util.Map;@Data
public class MyInstance {public String field1;public Integer field2;public Map<String, Object> properties;
}
测试类
package com.hust.zhang.yaml;import com.google.common.io.CharStreams;
import org.yaml.snakeyaml.Yaml;import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;public class YamlTest {//通过创建Yaml对象生成ThreadLocal初始化变量private final static ThreadLocal<Yaml> YAML_THREAD_LOCAL = ThreadLocal.withInitial(Yaml::new);public static void main(String[] args) {String name = "/test.yaml";MyInstance instance = load(name);System.out.println(instance.getName());}/*** 加载Yaml文件对象并转换成实例对象** @param name* @return*/private static MyInstance load(String name) {Yaml yaml = YamlTest.YAML_THREAD_LOCAL.get();try (final InputStream inputStream = Yaml.class.getResourceAsStream(name)) {final String conf = CharStreams.toString(new InputStreamReader(inputStream));return yaml.loadAs(conf, MyInstance.class);} catch (IOException e) {System.out.println("read yaml error : " + e);} catch (Exception e) {System.out.println("other error :" + e);}return null;}
}
输出结果如下,
上面需注意的点:
1、ThreadLocal是一个绑定线程的变量,它让每个线程独享自己的副本,避免了资源竞争。这样每个线程调用都能够拿到自己的Yaml对象。你说直接在主线程里创建Yaml对象不可以吗?当然可以,只不过这么写是为了复习ThreadLocal知识点。
2、try-catch语句块中用到了try-with-resource语法,这个前面讲过可以不需要我们手动去释放IO资源,简化了代码。
3、通过class.getResourceAsStream(String name)方法获取输入流,查询资源规则由给定的类的类加载器实现,对name以"/"开头读取绝对路径的资源。而它和class.getClassLoader().getResourceAsStream(String name)方法区别在于,后者是获取当前类的类加载器,默认从resources文件中获取不带"/"开头的资源。通过new InputStream(new File(name))获取输入流资源也是可以的。
4、yaml.loadAs()方法可以从输入流中获取数据转换成对象,也可以从String字符串中获取数据转换成对象。
参考链接:
1、https://www.runoob.com/w3cnote/yaml-intro.html
2、http://yaml.org/
3、https://github.com/owainlewis/yaml
SnakeYAML配置文件解析器相关推荐
- python 接口测试 如何写配置文件_python接口自动化测试 - configparser配置文件解析器详细使用...
configparser简介 ConfigParser模块已在Python 3中重命名为configparser 该模块定义了ConfigParser类. ConfigParser类实现一种基本的配置 ...
- parseConf(配置文件解析器)
1 /****************************************************************************** 2 * 3 * parseConf( ...
- python 配置文件解析代码_python3从零学习-5.5.2、configparser — 配置文件解析器
源代码: Lib/configparser.py 此模块提供了它实现一种基本配置语言 ConfigParser 类,这种语言所提供的结构与 Microsoft Windows INI 文件的类似. 你 ...
- 使用springMVC提供的CommonsMultipartResolver文件解析器,实现文件轻松上传
springMVC提供的前端控制器,可以拦截所有请求,指挥调度所有后台逻辑资源. 使用传统方式进行文件上传,需要我们手动解析request对象,获取文件上传项,再进行文件的上传. springMVC框 ...
- MyBatis 源码分析 - 配置文件解析过程
文章目录 * 本文速览 1.简介 2.配置文件解析过程分析 2.1 配置文件解析入口 2.2 解析 properties 配置 2.3 解析 settings 配置 2.3.1 settings 节点 ...
- mybatis配置文件解析
mybatis配置文件解析 mybatis核心配置文件`mybatis-config.xml文件. mybatis的配置文件包含了会深深影响mybatis行为的设置和属性信息. 能配置的内容: con ...
- rest-framework之解析器
rest-framework之解析器 本文目录 一 解析器的作用 二 全局使用解析器 三 局部使用解析器 四 源码分析 回到目录 一 解析器的作用 根据请求头 content-type 选择对应的解析 ...
- 【c语言】C语言配置文件解析库——iniparser
转载自:http://blog.csdn.net/u011192270/article/details/49339071 C语言配置文件解析库--iniparser 前言:在对项目的优化时,发现Lin ...
- C语言配置文件解析库——iniparser
C语言配置文件解析库--iniparser 1. 1.1前言:在对项目的优化时,发现Linux下没有专门的供给C语言使用的配置文件函数,于是搜索到了iniparser库,可以像那些面向对象语言一样,使 ...
- 详解Spring MVC 4之ViewResolver视图解析器
所有的We MVC框架都有一套它自己的解析视图的机制,Spring MVC也不例外,它使用ViewResolver进行视图解析,让用户在浏览器中渲染模型.ViewResolver是一种开箱即用的技术, ...
最新文章
- python中有效的变量名有哪些_python 如何使用变量名
- protoc gen php,protoc-gen-php --php_out: protoc-gen-php: Plugin output is unparseable.
- 汇编: cli, sti
- ios 从assets加载图片_Flutter图片添加水印功能,Flutter保存Widget为图片
- PreparedStatement预编译的sql执行对象
- 丘成桐在CNCC会议的演讲全文
- 使用Fluent NHibernate和AngularJS的Master Chef(第2部分)ASP.NET Core MVC
- 用Python搭建“冲顶大会”外挂,王思聪们还舍得撒币吗?
- POJ 1797 Heavy Transportation 最短路变形(dijkstra算法)
- vue - (v-pre、v-cloak、v-once)
- 2005/2010/2015-2021年全国兴趣点POI数据
- 操作系统实验报告,适用与大一大二学生
- w ndows7旗舰版网卡驱动,windows7万能网卡驱动官方下载
- python dataframe的某一列变为list_手把手教你用Python爬中国电影票房数据
- sql 恢复刚删除的表
- 六度空间-c++实现
- 【架构干货】京东是如何抗住今年春晚百亿次互动的?
- TCP 重传、滑动窗口、流量控制、拥塞控制
- httpwatch使用
- CodeLite 16无法自动代码补全
热门文章
- netperf测试工具
- Js封装组件 + Slots插槽
- udhcpc 参数使用说明
- zktime 协议_ZKTiMe5.0考勤管理系统使用介绍(1.3版).pdf
- node mysql菜鸟教程_Node.js 全局对象
- Google Earth Engine(GEE)——计算NDVI\EVI\RVI\DVI\SAVI归一化植被指数、比值植被指数、差值植被指数、土壤调节植被指数、增强型植被指数和绿度植被指数计算并下载
- 【计算理论】计算理论总结 ( 上下文无关文法 ) ★★
- MATLAB符号运算——积分
- 回归分析常数项t值没有显著异于零怎么办_SPSS线性回归|太方便了,别人不想告诉你的其他操作我都总结好了(中)...
- AI教程之谷歌的新 Imagen 视频从文本生成视频