Java 实现yaml配置文件的读取

常用的配置文件有yaml,xml,properties,json等,今天主要想记录下yaml 文件的读取。废话不多说,直接上代码。

package com.ex.util;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.net.URL;
import java.util.Map;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.yaml.snakeyaml.Yaml;

public class YmlUtil {
	protected String yml = null;
	private Logger logger = LogManager.getLogger(YmlUtil.class);

	public YmlUtil(String yml) {
		this.yml = yml;
	}
	
	public Object getYml(String path) {

		Yaml yaml = new Yaml();
		URL url = YmlUtil.class.getClassLoader().getResource(yml);
		if (url != null) {
			Map map;
			try {
				map = (Map) yaml.load(new FileInputStream(url.getFile()));
				return getValue(map, path);
			} catch (FileNotFoundException e) {

				logger.info("can not find the yml file, please double check");
				return null;
			}

		} else {
			return null;
		}
	}

	@SuppressWarnings("rawtypes")
	public static Object getValue(Map map, String value) {
		String[] values = value.split("\\.");
		Map m = map;
		int len = values.length - 1;
		for (int i = 0; i < len; i++) {
			if (m.containsKey(values[i])) {
				m = (Map) m.get(values[i]);
			} else {
				return null;
			}
		}
		return m.get(values[len]);
	}

}

常见的yaml可能是

server:localhost:8080/user

   f1:

       name:zhangsan

       age:18

   f2:

       name:lisi

       age:29

       orderList: apple, paper, car,glass

简单分析下代码:

  1. 首先需要导入snakeyaml-1.15.jar的jar 包,其次 定义一个有参的构造函数,这样的话在实例化时把要解析的配置文件传进来
  2. 其次要有一个方法能够获得yaml 中指定key对应的value,由于yaml都是key-value的形式, 所以需要将配置文件转化成多重map,将所有的key拿到,根据传参获得对应的value.
  3. 使用getYml传入key即可。 如果拿到的value 是个list,那么可以在list中通过特殊字符的方式分割 成数组, 之后可以对数组进行操作

其他类型的配置文件整体思路一样如此, 就不一一赘述啦。

题外话,yaml有一些保留字符是不可以作为key或者value的,写得时候可能觉得没问题,但是在使用快捷键format的时候,你所维护的值就被改掉了,嗯,我就掉进这个坑里过,希望你们排队入坑   ->_<-

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值