以下是操作yaml代码

pom文件引这个

<dependency>

    <groupId>com.fasterxml.jackson.dataformat</groupId>

    <artifactId>jackson-dataformat-yaml</artifactId>

    <version>2.11.1</version>

</dependency>

 下边是代码,传入yml 文件的路径就行(亲测,不知yml可以,yaml等键值对的文件都可以操作)

    private static DumperOptions dumperOptions = new DumperOptions();

    static {

        dumperOptions.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);

        dumperOptions.setDefaultScalarStyle(DumperOptions.ScalarStyle.PLAIN);

        dumperOptions.setPrettyFlow(false);

    }

 

/**

     * yaml文件转为map

     * @param yamlUr yaml文件的路径

     * @return map    

     */

    public static Map updateYaml(String yamlUr) {

        Yaml yaml = new Yaml(dumperOptions);

        Map map = null;

        try {

            //将yaml文件加载为map格式

            map = yaml.loadAs(new FileInputStream(yamlUr), Map.class);

        } catch (FileNotFoundException e) {

            e.printStackTrace();

        }

        return map;

    }

最后,贴上一段之前所用到的代码,一个完整的类,可以直接引进去用

package com.example.demo.utils;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.yaml.snakeyaml.DumperOptions;
import org.yaml.snakeyaml.Yaml;

import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Objects;

/**
 * @author cmf
 * @date 2023/5/29
 */
public class YamlUtil {


    private static final Logger log = LoggerFactory.getLogger(YamlUtil.class);

    /**
     * 读取yml文件配置
     *
     * @param fileName 文件的路径
     * @return yaml文件转Map(hashmap)
     * @throws FileNotFoundException 1.文件不存在  2. 文件没有读写权限
     */
    public static Map<?, ?> loadYaml(String fileName) throws FileNotFoundException {
        InputStream in = YamlUtil.class.getClassLoader().getResourceAsStream(fileName);
        return StringUtils.isNotEmpty(fileName) ? (LinkedHashMap<?, ?>) new Yaml().load(in) : null;
    }


    /**
     * 写回yaml
     *
     * @param fileName
     * @param map
     * @throws IOException
     */
    public static void dumpYaml(String fileName, Map<?, ?> map) throws IOException {
        if (StringUtils.isNotEmpty(fileName)) {
            FileWriter fileWriter = new FileWriter(Objects.requireNonNull(YamlUtil.class.getResource(fileName)).getFile());
            DumperOptions options = new DumperOptions();
            options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
            Yaml yaml = new Yaml(options);
            yaml.dump(map, fileWriter);
        }
    }

    /**
     * 获取指定key的值
     *
     * @param key      要获取的值对应的key的名称
     * @param fileName 文件存放路径
     * @return 对应key的值(String)
     */
    public static String getConfig(String key, String fileName) {
        HashMap<String, String> map = null;
        try {
            map = (HashMap<String, String>) loadYaml(fileName);
        } catch (FileNotFoundException e) {
            return null;
        }

        String value = map.get(key);
        if (value == null) {
            Map<?, ?> yamlMap = null;
            try {
                yamlMap = YamlUtil.loadYaml(fileName);
                value = String.valueOf(YamlUtil.getProperty(yamlMap, key));
                map.put(key, value != null ? value : StringUtils.EMPTY);
            } catch (FileNotFoundException ignored) {
                log.error("获取全局配置异常 {}", key);
            }
        }
        return value;
    }


    /**
     * 获取指定key的值
     *
     * @param map          yml配置文件,可以调34行的loadYaml()方法获取
     * @param qualifiedKey key
     * @return 对应key的值(Object)
     */
    public static Object getProperty(Map<?, ?> map, Object qualifiedKey) {
        if (map != null && !map.isEmpty() && qualifiedKey != null) {
            String input = String.valueOf(qualifiedKey);
            if (!input.equals("")) {
                if (input.contains(".")) {
                    int index = input.indexOf(".");
                    String left = input.substring(0, index);
                    String right = input.substring(index + 1, input.length());
                    return getProperty((Map<?, ?>) map.get(left), right);
                } else if (map.containsKey(input)) {
                    return map.get(input);
                } else {
                    return null;
                }
            }
        }
        return null;
    }


    @SuppressWarnings("unchecked")
    public static void setProperty(Map<?, ?> map, Object qualifiedKey, Object value) {
        if (map != null && !map.isEmpty() && qualifiedKey != null) {
            String input = String.valueOf(qualifiedKey);
            if (!input.equals("")) {
                if (input.contains(".")) {
                    int index = input.indexOf(".");
                    String left = input.substring(0, index);
                    String right = input.substring(index + 1, input.length());
                    setProperty((Map<?, ?>) map.get(left), right, value);
                } else {
                    ((Map<Object, Object>) map).put(qualifiedKey, value);
                }
            }
        }
    }
}

————————————————

版权声明:本文为CSDN博主「xiaoan9527」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/xiaoan9527/article/details/119649937