java解析yaml_YAML配置文件解析器:SnakeYAML

本文介绍如何利用SnakeYAML库读取并解析YAML配置文件,将其转换为Map对象。通过示例代码展示加载过程,并探讨了Map如何存储配置文件的嵌套数据结构。此外,提供了一个打印Map内容的辅助函数,帮助理解数据组织方式。
摘要由CSDN通过智能技术生成

本篇blog主要是讨论:

如何使用SnakeYAML来读取YAML(YML为其简写)配置文件;

读取后,装载成Map,而Map如何存储的配置文件的数据。

SnakeYAML的简介

SnakeYAML是针对java语言的YAML解析器。如果想更多的了解SnakeYAML和YMAL,请看blog:

如何读取YAML配置文件

请看代码:

FileInputStream fileInputStream = null;

try {

Yaml yaml = new Yaml();//实例化解析器

File file = new File("inscriber-s\\src\\main\\resources\\application.yml");//配置文件地址

fileInputStream = new FileInputStream(file);

Map map = yaml.loadAs(fileInputStream, Map.class);//装载的对象,这里使用Map, 当然也可使用自己写的对象

//printMap(map, 0);

}catch(FileNotFoundException e) {

log.error("文件地址错误");

e.printStackTrace();

}finally {

try {

if(fileInputStream!=null) fileInputStream.close();

}catch (IOException e){

e.printStackTrace();

}

}

Map是如何存储的配置文件数据

以下面的.yml配置文件为例:

# mybatis

mybatis:

type-aliases-package: info.ideatower.component.inscriber.entity

mapper-locations: classpath:mapping/*.xml

config-locations: classpath:mybatis-config.xml

# 应用组件通信等配置

component:

misso:

log:

addr: http://localhost:8009

error:

enable: on

Related:

Projects:

- Rx

- Kwalify

- yaml_vim

- yatools.net

- JSON

- Pygments

使用SnakeYAML进行装载,实例化成Map对象(确切的说,应该是Map的子类,LinkedHashMap)。值得注意的是,要装载如此复杂的配置文件的,必须使用Map的嵌套,即:Map嵌套Map。具体请看下图:

e35a0c6b94e81c5e0f9e9d45114a741d.png

其中,椭圆圈为key, 矩形圈的为value, 嵌套结构显而易先。如下图:

fb4c0e35be76a26bc6a80b9b002a7e65.png

一般的,key的类类型总是java.lang.Stirng, 而value的类类型是不尽相同的。请看下图:

601f77da73729b80ab1d1a03b41c0c8d.png

小小的拓展

一段打印Map的数据的函数,如果读懂的话,会更加理解本篇blog的内容:

private void printMap(Map map, int count){

Set set = map.keySet();

for(Object key: set){

Object value = map.get(key);

for(int i=0; i

System.out.print(" ");

}

if(value instanceof Map) {

System.out.println(key+":");

printMap((Map)value, count+1);//嵌套

}else if(value instanceof List){

System.out.println(key+":");

for(Object obj: (List)value){

for(int i=0; i

System.out.print(" ");

}

System.out.println(" - "+obj.toString());

}

}else{

System.out.println(key + ": " + value);

}

}

}

end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值