java读取yaml文件取值的工具类(包括读取多层级的yaml文件)

导入依赖

<dependency>
            <groupId>org.yaml</groupId>
            <artifactId>snakeyaml</artifactId>
            <version>1.23</version>
</dependency>

创建一个test.yaml

spring:
  application:
    name: cruncher
  datasource:
    driverClassName: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost/test
server:
  port: 9000

工具类

import org.yaml.snakeyaml.Yaml;

import java.io.InputStream;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;

public class YamlUtil {

    private static LinkedHashMap<String,Map<String,String>> properties;



    public static void getYamlMap(String yamlName){
        InputStream in=null;
        try {
            Yaml yaml = new Yaml();
            in = YamlUtil.class.getClassLoader().getResourceAsStream(yamlName);
            properties =yaml.loadAs(in,LinkedHashMap.class);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try{
                in.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }

    public static String getValueByKey(String yamlName,String root,String key){
        getYamlMap(yamlName);
        String value=null;
        if(root.equals(key)){
            Iterator it = properties.entrySet().iterator();
            while(it.hasNext()){
                Map.Entry entry=(Map.Entry) it.next();
                if(key.equals(entry.getKey())){
                    value=(String)entry.getValue();
                    break;
                }
            }
        }else{
            LinkedHashMap<String,String> rootProperty= (LinkedHashMap<String, String>) properties.get(root);
            value=iter(rootProperty,key);

        }
        return value;
    }

    public static String iter(LinkedHashMap<String,String> rootProperty,String key){
        Iterator it = rootProperty.entrySet().iterator();
        String value=null;
        while(it.hasNext()){
            Map.Entry entry=(Map.Entry) it.next();
            if(key.equals(entry.getKey())){

                return (String)entry.getValue();
            }
            if(!(entry.getValue() instanceof LinkedHashMap)){
                continue;
            }
            value=iter((LinkedHashMap<String, String>) entry.getValue(),key);
            if(value!=null){
                break;
            }
        }
        return value;
    }

测试

    public static void main(String[] args) {
        //test.yaml文件放在resource目录下即可,spring为根变量,也就是我们想要获取的url这个键的源头的那个键
        String value=YamlUtil.getValueByKey("test.yaml","spring","url");
        System.out.println("value:"+value);
    }

测试结果

猜你喜欢

转载自blog.csdn.net/m0_55868614/article/details/120733775