序言

实际开发项目中会有好多的配置文件,有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配置文件解析器相关推荐

  1. python 接口测试 如何写配置文件_python接口自动化测试 - configparser配置文件解析器详细使用...

    configparser简介 ConfigParser模块已在Python 3中重命名为configparser 该模块定义了ConfigParser类. ConfigParser类实现一种基本的配置 ...

  2. parseConf(配置文件解析器)

    1 /****************************************************************************** 2 * 3 * parseConf( ...

  3. python 配置文件解析代码_python3从零学习-5.5.2、configparser — 配置文件解析器

    源代码: Lib/configparser.py 此模块提供了它实现一种基本配置语言 ConfigParser 类,这种语言所提供的结构与 Microsoft Windows INI 文件的类似. 你 ...

  4. 使用springMVC提供的CommonsMultipartResolver文件解析器,实现文件轻松上传

    springMVC提供的前端控制器,可以拦截所有请求,指挥调度所有后台逻辑资源. 使用传统方式进行文件上传,需要我们手动解析request对象,获取文件上传项,再进行文件的上传. springMVC框 ...

  5. MyBatis 源码分析 - 配置文件解析过程

    文章目录 * 本文速览 1.简介 2.配置文件解析过程分析 2.1 配置文件解析入口 2.2 解析 properties 配置 2.3 解析 settings 配置 2.3.1 settings 节点 ...

  6. mybatis配置文件解析

    mybatis配置文件解析 mybatis核心配置文件`mybatis-config.xml文件. mybatis的配置文件包含了会深深影响mybatis行为的设置和属性信息. 能配置的内容: con ...

  7. rest-framework之解析器

    rest-framework之解析器 本文目录 一 解析器的作用 二 全局使用解析器 三 局部使用解析器 四 源码分析 回到目录 一 解析器的作用 根据请求头 content-type 选择对应的解析 ...

  8. 【c语言】C语言配置文件解析库——iniparser

    转载自:http://blog.csdn.net/u011192270/article/details/49339071 C语言配置文件解析库--iniparser 前言:在对项目的优化时,发现Lin ...

  9. C语言配置文件解析库——iniparser

    C语言配置文件解析库--iniparser 1. 1.1前言:在对项目的优化时,发现Linux下没有专门的供给C语言使用的配置文件函数,于是搜索到了iniparser库,可以像那些面向对象语言一样,使 ...

  10. 详解Spring MVC 4之ViewResolver视图解析器

    所有的We MVC框架都有一套它自己的解析视图的机制,Spring MVC也不例外,它使用ViewResolver进行视图解析,让用户在浏览器中渲染模型.ViewResolver是一种开箱即用的技术, ...

最新文章

  1. python中有效的变量名有哪些_python 如何使用变量名
  2. protoc gen php,protoc-gen-php --php_out: protoc-gen-php: Plugin output is unparseable.
  3. 汇编: cli, sti
  4. ios 从assets加载图片_Flutter图片添加水印功能,Flutter保存Widget为图片
  5. PreparedStatement预编译的sql执行对象
  6. 丘成桐在CNCC会议的演讲全文
  7. 使用Fluent NHibernate和AngularJS的Master Chef(第2部分)ASP.NET Core MVC
  8. 用Python搭建“冲顶大会”外挂,王思聪们还舍得撒币吗?
  9. POJ 1797 Heavy Transportation 最短路变形(dijkstra算法)
  10. vue - (v-pre、v-cloak、v-once)
  11. 2005/2010/2015-2021年全国兴趣点POI数据
  12. 操作系统实验报告,适用与大一大二学生
  13. w ndows7旗舰版网卡驱动,windows7万能网卡驱动官方下载
  14. python dataframe的某一列变为list_手把手教你用Python爬中国电影票房数据
  15. sql 恢复刚删除的表
  16. 六度空间-c++实现
  17. 【架构干货】京东是如何抗住今年春晚百亿次互动的?
  18. TCP 重传、滑动窗口、流量控制、拥塞控制
  19. httpwatch使用
  20. CodeLite 16无法自动代码补全

热门文章

  1. netperf测试工具
  2. Js封装组件 + Slots插槽
  3. udhcpc 参数使用说明
  4. zktime 协议_ZKTiMe5.0考勤管理系统使用介绍(1.3版).pdf
  5. node mysql菜鸟教程_Node.js 全局对象
  6. Google Earth Engine(GEE)——计算NDVI\EVI\RVI\DVI\SAVI归一化植被指数、比值植被指数、差值植被指数、土壤调节植被指数、增强型植被指数和绿度植被指数计算并下载
  7. 【计算理论】计算理论总结 ( 上下文无关文法 ) ★★
  8. MATLAB符号运算——积分
  9. 回归分析常数项t值没有显著异于零怎么办_SPSS线性回归|太方便了,别人不想告诉你的其他操作我都总结好了(中)...
  10. AI教程之谷歌的新 Imagen 视频从文本生成视频