java编辑yml_简化java编辑YML(YAML)格式配置文件操作

时间:2025-04-05 07:19:06

最近做的项目里需要用java修改springboot的配置文件,需要新增或修改某一个属性的值,使用了snakeyaml发现在编辑多级结构的yaml文件时,操作较为复杂,所以做了些简化,不用每次都做特殊处理,使用类似于properties文件的处理方式。

MAVEN上所需依赖。

snakeyaml

1.17

代码如下:

import ;

import ;

import .*;

import ;

import ;

import ;

/**

* @author hongweidong

* @desc 操作yaml文件的工具类

* @date 2019-01-29 20:03

*/

public class YmlUtils {

private final static DumperOptions OPTIONS = new DumperOptions();

static {

//将默认读取的方式设置为块状读取

();

}

/**

* 初始化map,将map中属性包含.的形成多级map结构,方便保存

* @param map 需要初始化的map

* @author hongweidong

*/

public static MapinitMap(Mapmap){

Mapresult = new LinkedHashMap();

(map);

for (String s : ()) {

if((s) == null){

(s,"");

}

if (s.split("\\.").length > 1) {

String key[] = ("\\.");

MaptarMap = new LinkedHashMap();

for (int i = 0; i < ; i++) {

if (i == - 1) {

//最后一位

(key[i], (s));

} else {

if ((key[i]) != null) {

tarMap = (Map) (key[i]);

} else {

tarMap = (Map) (key[i]);

}

}

}

(s);

}

}

return result;

}

/**

* 测试方法

*/

public static void main(String args[]){

Mapmap = getYmlMap("F:/");

//把spring下datasoource下primary下username的值改变root

("","root");

map = initMap(map);

try {

addIntoYaml("F:/",map);

} catch (IOException e) {

();

}

("");

}

public static void addIntoYaml(String dest, Mapmap) throws IOException {

map = (map);

Yaml yaml = new Yaml(OPTIONS);

//载入当前yml文件

LinkedHashMapdataMap = (LinkedHashMap)(new FileReader(dest));

//如果yml内容为空,则会引发空指针异常,此处进行判断

if (null == dataMap) {

dataMap = new LinkedHashMap();

}

(map);

//将数据重新写回文件

yaml.dump(dataMap, new FileWriter(dest));

}

public static LinkedHashMapgetYmlMap(String path){

File source = new File(path);

Yaml yaml = new Yaml(OPTIONS);

//载入文件

LinkedHashMapdataMap = null;

try {

dataMap = (LinkedHashMap)(new FileReader(source));

} catch (FileNotFoundException e) {

();

}

//获取当前key下的值(如果存在多个节点,则value可能为map,自行判断)

return dataMap;

}

}