读取 yaml 文件

文章介绍了如何在Java中使用Snakeyaml库处理yaml文件,包括上传文件、读取资源目录下的yaml、以及处理文件不存在或格式错误的情况。应用示例展示了如何在RESTAPI中调用这些工具获取yaml信息。
摘要由CSDN通过智能技术生成

一、引入依赖

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

二、读取yaml内容工作代码

(1)上传yaml文件

读取yaml文件并校验

package com.util;

import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.parser.ParserException;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.Map;


@Slf4j
public class YmlTransUtil {

    /**
     * 读取并校验语法 yaml
     *
     * @param file 需要读取的文件
     * @return Map
     */
    public static Map getReadAbleYaml(File file) {
        Map obj = new HashMap();
        try (FileInputStream ins = new FileInputStream(file)) {
            Yaml yaml = new Yaml();
            obj = yaml.load(ins);
        } catch (FileNotFoundException exception) {
            log.error("yaml文件不存在", exception);
            obj.put("error", "yaml文件不存在");
        } catch (ParserException exception) {
            log.error("yaml文件格式错误!", exception);
            obj.put("error", "yaml文件格式错误!\n" + exception.getMessage());
        } catch (Exception exception) {
            log.error("getReadAbleYaml error: ", exception);
        }
        return obj;
    }
}

(2) 根据yaml文件路径

src.resource 下的yaml文件

package com.utils;

import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.io.Resources;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.parser.ParserException;

import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

@Slf4j
public class YamlUtil {

    /**
     * 读取 ymal
     *
     * @param path 需要读取的文件路径
     * @return Map
     */
    public static Map getReadAbleYaml(String path) {
        Map obj = new HashMap();
        try( InputStream ins = Resources.getResourceAsStream(path)) {
            Yaml yaml = new Yaml();
            obj = yaml.load(ins);
        } catch (FileNotFoundException exception){
            log.error("yaml文件不存在");
            obj.put("error", "yaml文件不存在");
        }  catch (ParserException exception){
            log.error("yaml文件格式错误!");
            log.error(exception.getMessage());
            obj.put("error", "yaml文件格式错误!\n" + exception.getMessage());
        }  catch (Exception exception) {
            log.error(exception.getMessage());
        }
        return obj;
    }
}

三、应用代码

(1)上传yaml文件

java

@RequestMapping(value = "/getYamlInfo", method = RequestMethod.POST)
    public RestResponse getYamlInfo(@RequestParam(value = "file") MultipartFile file) {
        RestResponse restResponse = new RestResponse();
        if (file == null) {
            log.info("getYamlInfo error: file is not empty.");
            return RestResponse.setErrorResponse(restResponse, "getYamlInfo error: file is not empty.");
        }
        try {
            // 校验合法性
            File newFile = File.createTempFile("temp", ".yml");
            file.transferTo(newFile);
            Map properties = YmlTransUtil.getReadAbleYaml(newFile);
            if (properties.get("error") != null) {
                return RestResponse.setErrorResponse(restResponse, properties.get("error").toString());
            }
        } catch (Exception exception) {
            log.error("getYamlInfo error.", exception);
            return RestResponse.setErrorResponse(restResponse, "getYamlInfo error.");
        }
        return restResponse;
    }

(2)读取项目src.resource下的yaml

Map properties = YamlUtil.getReadAbleYaml("text.yml");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值