常用的配置文件有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
简单分析下代码:
- 首先需要导入snakeyaml-1.15.jar的jar 包,其次 定义一个有参的构造函数,这样的话在实例化时把要解析的配置文件传进来
- 其次要有一个方法能够获得yaml 中指定key对应的value,由于yaml都是key-value的形式, 所以需要将配置文件转化成多重map,将所有的key拿到,根据传参获得对应的value.
- 使用getYml传入key即可。 如果拿到的value 是个list,那么可以在list中通过特殊字符的方式分割 成数组, 之后可以对数组进行操作
其他类型的配置文件整体思路一样如此, 就不一一赘述啦。
题外话,yaml有一些保留字符是不可以作为key或者value的,写得时候可能觉得没问题,但是在使用快捷键format的时候,你所维护的值就被改掉了,嗯,我就掉进这个坑里过,希望你们排队入坑 ->_<-