首页 > 编程语言 >java读取yaml文件

java读取yaml文件

时间:2023-12-26 16:35:32浏览次数:45  
标签:java 读取 List System yaml println import com public

应用场景

自动化测试中,用例数据存放在yaml文件中

 

数据

java读取yaml文件_List

 

person.yaml

---
id: 1
name: 韧
age: 18
---
id: 2
name: qzcsbj
age: 19

  

person2.yaml

---
- id: 3
  name: 小韧
  age: 18

- id: 4
  name: 全栈测试笔记
  age: 19

  

person3.yaml

---
- id: 5
  name: 韧哥
  age: 18

- id: 6
  name: 性能测试
  age: 19

  

Person.java

package com.test.bean;

/**
 * @公众号 : 全栈测试笔
 * @描述 : <>
 */
public class Person {
    private String id;
    private String name;
    private String age;


    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age='" + age + '\'' +
                '}';
    }
}

  

读取并返回对象

package com.test.utils;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import com.test.bean.Person;
import java.io.IOException;



/**
 * @公众号 : 全栈测试笔记
 * @描述 : <>
 */
public class ReadDataFromYaml {
    public static Person getData(String path, Person p){
        ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());

        try {
            return objectMapper.readValue(ReadDataFromYaml.class.getResourceAsStream(path), p.getClass());
        } catch (IOException e) {
            System.out.println("读取异常:" + e);
        }
        return null;
    }

    public static void main(String[] args) {
        Person p = new Person();
        p = getData("/caseData/person.yaml", p);
        System.out.println(p);
        if (p!=null){
            System.out.println(p.getId());
            System.out.println(p.getName());
            System.out.println(p.getAge());
        }
    }
}

  

结果

java读取yaml文件_java_02

 

优化:泛型,传字节码

package com.test.utils;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import com.test.bean.Person;

/**
 * @公众号 : 全栈测试笔记
 * @描述 : <>
 */
public class ReadDataFromYaml {

    public static <T> T getData(String path, Class<T> clazz){
        ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
        try {
            T obj = objectMapper.readValue(ReadDataFromYaml.class.getResourceAsStream(path), clazz);
            return obj;
        } catch (Exception e) {
            System.out.println("异常:" + e);
        }
        return null;
    }

    public static void main(String[] args) {
        Person p = getData("/caseData/person.yaml", Person.class);
        System.out.println(p);
        if (p!=null){
            System.out.println(p.getId());
            System.out.println(p.getName());
            System.out.println(p.getAge());
        }
    }
}

 

结果

java读取yaml文件_System_03

 

 

读取并返回对象list

package com.test.utils;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import com.test.bean.Person;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * @公众号 : 全栈测试笔记
 * @描述 : <>
 */
public class ReadDataFromYaml {

    public static List<Person> getData(String path, List<Person> plist){
        ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
        try {
            plist = objectMapper.readValue(ReadDataFromYaml.class.getResourceAsStream(path), plist.getClass());
            return plist;
        } catch (IOException e) {
            System.out.println("读取异常:" + e);
        }
        return null;
    }

    public static void main(String[] args) {
        List<Person> plist = new ArrayList<Person>();
        plist = getData("/caseData/person2.yaml", plist);
        System.out.println(plist);
    }
}

  

结果

java读取yaml文件_List_04

 

优化:泛型,传字节码

package com.test.utils;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import com.test.bean.Person;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * @公众号 : 全栈测试笔记
 * @描述 : <>
 */
public class ReadDataFromYaml {

    public static <T> List<T> getData(String path, Class<T> clazz){
        ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
        try {
            List<T> list = objectMapper.readValue(ReadDataFromYaml.class.getResourceAsStream(path), List.class);

            return list;
        } catch (IOException e) {
            System.out.println("读取异常:" + e);
        }
        return null;
    }

    public static void main(String[] args) {
        List<Person> plist = new ArrayList<Person>();
        List<Person> plist1 = getData("/caseData/person2.yaml", Person.class);

        if ( plist1!=null){

            plist.addAll(plist1);
        }
        List<Person> plist2 = getData("/caseData/person2.yaml", Person.class);
        if ( plist2!=null){
            plist.addAll(plist2);
        }
        System.out.println(plist);
    }
}

  

结果

java读取yaml文件_List_05

 

问题

上面可以把多个yaml的数据放到一个list里面

但是,如果打印对象内容(模拟解析测试用例数据)

public static void main(String[] args) {
        List<Person> plist = new ArrayList<Person>();
        List<Person> plist1 = getData("/caseData/person2.yaml", Person.class);

        if ( plist1!=null){
            plist.addAll(plist1);
        }
        List<Person> plist2 = getData("/caseData/person2.yaml", Person.class);
        if ( plist2!=null){
            plist.addAll(plist2);
        }
        System.out.println(plist);
        for (Person person : plist2) {
            System.out.println(person.getName());
        }
    }

  

结果报错:

[{id=3, name=小韧, age=18}, {id=4, name=全栈测试笔记, age=19}, {id=3, name=小韧, age=18}, {id=4, name=全栈测试笔记, age=19}]
Exception in thread "main" java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.test.bean.Person
	at com.test.utils.ReadDataFromYaml.main(ReadDataFromYaml.java:39)

 

java读取yaml文件_System_06

 

debug发现,list的元素是LinkedHashMap类型

java读取yaml文件_List_07

 

解决方案:转换为指定类型

package com.test.utils;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import com.test.bean.Person;
import java.util.ArrayList;
import java.util.List;

/**
 * @公众号 : 全栈测试笔记
 * @描述 : <>
 */
public class ReadDataFromYaml {
    public static List<Person> getData(String path) {
        ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
        try {
            List list = objectMapper.readValue(ReadDataFromYaml.class.getResourceAsStream(path), List.class);

            // 转成指定类型的list集合
            List<Person> list_new = objectMapper.convertValue(list, new TypeReference<List<Person>>() {});
            return list_new;

        } catch (Exception e) {
            System.out.println("异常:" + e);
        }
        return null;
    }

    public static void main(String[] args) {
        List<Person> plist = new ArrayList<Person>();
        List<Person> plist1 = getData("/caseData/person2.yaml");

        if ( plist1!=null){
            plist.addAll(plist1);
        }
        List<Person> plist2 = getData("/caseData/person3.yaml");
        if ( plist2!=null){
            plist.addAll(plist2);
            for (Person person : plist2) {
                System.out.println(person.getId());
                System.out.println(person.getName());
                System.out.println(person.getAge());
            }
        }
        System.out.println(plist);
    }
}

 

结果  

java读取yaml文件_System_08

 

思考题

上面解决方案中,类型写死了,如果作为一个工具类,如何实现传任意类型?

 

【bak】

 

__EOF__


本文作者:持之以恒(韧)



标签:java,读取,List,System,yaml,println,import,com,public
From: https://blog.51cto.com/qzcsbj/8984746

相关文章

  • JavaWeb - Day12 - 基础登录功能、登录校验(重点)、登录认证、异常处理
    01.登录基础功能在前面的课程中,我们已经实现了部门管理、员工管理的基本功能,但是大家会发现,我们并没有登录,就直接访问到了Tlias智能学习辅助系统的后台。这是不安全的,所以我们今天的主题就是登录认证。最终我们要实现的效果就是用户必须登录之后,才可以访问后台系统中的功能。......
  • 无涯教程-Java9 - JavaDocs增强
    可以使用javadoc工具生成Java文档。当前,它以html4.0格式生成文档。在Java9中,无涯教程可以通过在命令行参数中使用-html5选项来生成html5格式的文档。旧样式Java文档考虑以下C:/JAVA文件夹中的代码。/***@authorMahKumar*@version0.1*/publicclassTester{......
  • Java 二维数组
    二维数组:二维数组的元素个数=二维数组中一维数组的个数= arr.length;二维数组的每个元素是一维数组,所以如果需要得到每个一维数组中的元素,还需要再遍历一维数组;arr[i][j]表示:二维数组的第 i+1 个一维数组的第 j+1 个元素;二维数组的初始化: 1.静态初始化定......
  • java爬虫(jsoup)如何设置HTTP代理ip爬数据
    前言在Java中使用Jsoup进行网络爬虫操作时,有时需要使用HTTP代理IP来爬取数据。本文将介绍如何使用Jsoup设置HTTP代理IP进行爬取,并提供相关代码示例。什么是HTTP代理IPHTTP代理IP是一种允许我们通过代理服务器访问互联网的方式。一般情况下,我们访问网站时,直接使用自己的IP地址进行通......
  • 为什么python总是读取不到文件
    在Python中,当你尝试读取文件但却无法成功时,可能有几个常见的原因。下面将探讨一些可能导致Python无法读取文件的问题,并提供相应的解决方案。1.文件路径错误:当你提供给Python的文件路径不正确时,它将无法找到该文件。确保你提供的文件路径是准确的,包括文件名和文件所在的文件夹路径。......
  • 无涯教程-Java9 - JShell(REPL)
    REPL代表"Read-Eval-PrintLoop"。使用JShell,java具有REPL函数。使用REPL,无涯教程可以对基于Java的逻辑进行编码和测试,而无需使用javac进行编译,并且可以直接查看计算输出。运行JShell打开命令提示符,然后键入jshell。$jshell|WelcometoJShell--Version9-ea|Forani......
  • Java:hutool工具箱实现文件大小的友好输出
    文档https://doc.hutool.cn/基本使用依赖<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.22</version></dependency>示例packagecom.example.demo;importorg......
  • ArcGIS API for JavaScript 4.x 免登录调用arcgis online私有服务
    APIkeys|ArcGISDevelopers 前言 本来以为普通用户调用服务只能依靠登录,仔细研究了一下可以通过key来实现免登录调用服务。背景最近在做一个BIM结合GIS的Demo,先通过arcgispro将.rvt文件配准到实际位置,然后打包成slpk文件,拖拽到arcgisonline发布出来,最后在前端加载。 ......
  • Java变量再次理解
    Java变量共分为三类,分别为成员变量,局部变量,静态变量希望这次可以理解的透彻并记住成员变量(也叫实例变量,对象变量):其实通俗理解就是当每个对象都想有自己的变量值时就是声明成员变量,比如班级里的每个人都有自己的name,我们创建类的时候声明的成员变量的名字是name,这样大家都有自......
  • JavaWeb笔记
    JavaWeb笔记Servlet什么Servlet?servlet是运行在Web服务器中的小型Java程序(即:服务器端的小应用程序)。servlet通常通过HTTP(超文本传输协议)接收和响应来自Web客户端的请求。编写一个servlet程序:a、写一个java类,实现servlet接口b、修改web.xml文件,给servlet提供一个可......