java实现读取yaml文件,并获取值

首先在项目src目录下新建一个test.yaml的文件.

代码如下:

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

然后test代码:

package com.ming.yaml;

import java.io.FileInputStream;
import java.net.URL;
import java.util.Map;

import org.yaml.snakeyaml.Yaml;

public class Test {

    public static void main(String[] args) {
        
        try {
            Yaml yaml = new Yaml();
            URL url = Test.class.getClassLoader().getResource("test.yaml");
            if (url != null) {
                //获取test.yaml文件中的配置数据,然后转换为obj,
                Object obj =yaml.load(new FileInputStream(url.getFile()));
                System.out.println(obj);
                //也可以将值转换为Map
                Map map =(Map)yaml.load(new FileInputStream(url.getFile()));
                System.out.println(map);
                //通过map我们取值就可以了.
                
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        
    }

}

运行结果如下:

小结:通过获取yaml文件的配置属性,通过map取值即可,如果想将获取的字符串转为对象,可以通过第三方插件库转。这个yaml文件确实比属性文件强大多了.

 

转载于:https://www.cnblogs.com/huzi007/p/5841699.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java本身没有直接读取YAML文件包括注释的API,但可以使用第三方库SnakeYAML实现。 以下是一个示例代码,使用SnakeYAML读取YAML文件内容包括注释: ```java import org.yaml.snakeyaml.Yaml; import org.yaml.snakeyaml.constructor.Constructor; import org.yaml.snakeyaml.nodes.Node; import org.yaml.snakeyaml.nodes.Tag; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.util.LinkedHashMap; import java.util.Map; public class YamlReader { public static void main(String[] args) throws FileNotFoundException { Yaml yaml = new Yaml(new CommentedConstructor()); InputStream inputStream = new FileInputStream("config.yml"); Map<String, Object> obj = yaml.load(inputStream); System.out.println(obj); } } class CommentedConstructor extends Constructor { public CommentedConstructor() { this.yamlConstructors.put(null, new CommentedConstruct()); } private class CommentedConstruct extends Constructor.ConstructYamlMap { @Override public Object construct(Node node) { Object obj = super.construct(node); if (node instanceof org.yaml.snakeyaml.nodes.MappingNode) { org.yaml.snakeyaml.nodes.MappingNode mnode = (org.yaml.snakeyaml.nodes.MappingNode) node; Map<String, Object> map = (Map<String, Object>) obj; for (org.yaml.snakeyaml.nodes.NodeTuple tuple : mnode.getValue()) { org.yaml.snakeyaml.nodes.Node keyNode = tuple.getKeyNode(); if (keyNode instanceof org.yaml.snakeyaml.nodes.ScalarNode) { org.yaml.snakeyaml.nodes.ScalarNode scalarNode = (org.yaml.snakeyaml.nodes.ScalarNode) keyNode; String key = scalarNode.getValue(); map.put(key, tuple.getValueNode().getRawValue()); // 将注释保存到map中 if (tuple.getValueNode().getTag().equals(Tag.COMMENT)) { map.put("#" + key, tuple.getValueNode().getValue()); } } } } return obj; } } } ``` 这里使用了CommentedConstructor继承自SnakeYAML的Constructor类,重写了构造函数,并在其中对节点进行了处理。使用时只需要将YAML文件的路径修改为自己的文件路径即可。 需要注意的是,这里的注释是以键对的方式保存在Map中的,键为"#"+原键名。因此在获取对时需要注意。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值