[Java学习]使用java解析.yml文件

test.yml文件内容如下:


file:
  - path: "/"
    owners:  ["a", "b"]
  - path2: "aaa"
    owners:  ["c", "d"]

  - path3:
      - aaaa:
          - bbbb: "b"
id: Ex1

coverage:
  file_suffix: [ ".java" ]

如何使用snakeyaml解析出来对应的值

<dependencies>
        <dependency>
            <groupId>org.yaml</groupId>
            <artifactId>snakeyaml</artifactId>
            <version>1.26</version>
        </dependency>
    </dependencies>

上代码:

package com.test.main;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import org.yaml.snakeyaml.Yaml;

public class YmlConfig {
    public static void main(String[] args) {
        System.out.println(YmlConfig.allMap);
        String ss3 = allMap.get("file.path2");
        System.out.println("file.path2:"+ss3);
        String ss4 = allMap.get("file.owners");
        System.out.println("file.owners:"+ss4);
        String ss5 = allMap.get("file.path3.aaaa.bbbb");
        System.out.println("file.path3.aaaa.bbbb:"+ss5);
        String ss6 = allMap.get("id");
        System.out.println("id:"+ss6);
        String ss7 = allMap.get("coverage.file_suffix");
        System.out.println("coverage.file_suffix:"+ss7);
    }
    private static Map<String,String> allMap = new HashMap<String,String>();
    static {
        Yaml yaml = new Yaml();
        InputStream inputStream = null;
        try {
            inputStream = new FileInputStream("C:\\Users\\baosenzhang\\IdeaProjects\\YmlStudy\\test.yml");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        Iterator<Object> result = yaml.loadAll(inputStream).iterator();
        while(result.hasNext()){
            Map map=(Map)result.next();
            iteratorYml( map,null);
        }
    }

    public static void iteratorYml(Map map,String key){
        Iterator iterator = map.entrySet().iterator();
        while(iterator.hasNext()){
            Map.Entry entry = (Map.Entry) iterator.next();
            Object key2 = entry.getKey();
            Object value = entry.getValue();
            if(value instanceof LinkedHashMap){
                if(key==null){
                    iteratorYml((Map)value,key2.toString());

                }else{
                    iteratorYml((Map)value,key+"."+key2.toString());
                }
            }
            if(value instanceof String){
                if(key==null){
                    allMap.put(key2.toString(), value.toString());
                }
                if(key!=null){
                    allMap.put(key+"."+key2.toString(), value.toString());
                }
            }
            if (value instanceof ArrayList) {
                if(key==null){
                    allMap.put(key2.toString(), value.toString());
                    Iterator<?> iter = ((ArrayList<?>) value).iterator();
                    while (iter.hasNext()){
                        Object next = iter.next();
                        if (next instanceof LinkedHashMap){
                            iteratorYml((Map)next,key2.toString());
                        }
                    }
                }
                if(key!=null){
                    allMap.put(key+"."+key2.toString(), value.toString());
                    Iterator<?> iter = ((ArrayList<?>) value).iterator();
                    while (iter.hasNext()){
                        Object next = iter.next();
                        if (next instanceof LinkedHashMap){
                            iteratorYml((Map)next,key+"."+key2.toString());
                        }
                    }
                }
            }
        }

    }
}

运行结果:

{file.path=/, coverage.file_suffix=[.java], file=[{path=/, owners=[a, b]}, {path2=aaa, owners=[c, d]}, {path3=[{aaaa=[{bbbb=b}]}]}], file.path3=[{aaaa=[{bbbb=b}]}], file.path2=aaa, file.path3.aaaa=[{bbbb=b}], id=Ex1, file.path3.aaaa.bbbb=b, file.owners=[c, d]}
file.path2:aaa
file.owners:[c, d]
file.path3.aaaa.bbbb:b
id:Ex1
coverage.file_suffix:[.java]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值