读取 yaml 文件

一、引入依赖


    org.yaml
    snakeyaml
    1.32

二、读取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");

你可能感兴趣的:(java,开发语言)