mvc读取、写入yaml文件详细讲解

一.读取YAML文件

引言

核心就是导包,然后读取是直接使用 yaml 对象中的load方法,会返回一个map对象的.然后遍历这个map得到自己想要的数据就可以了。然后是写入,直接调用yaml对象的一个dump方法,他是可以把一个map写入为yaml格式文件的。写入需要注意的地方是,要先把文件中的内容读取出来,然后添加 或 修改 map中的内容,然后把修改后的map在写入到文件.。【2】
如果不读取会把之前的配置给覆盖掉的.

step1:导入依赖
<dependency>
            <groupId>org.yaml</groupId>
            <artifactId>snakeyaml</artifactId>
            <version>1.23</version>
        </dependency>
step2:编写yaml文件,我这里以test.yaml为例

1.存放位置,resources文件夹下,先看一眼 我的目录树

filecontroller是他的操作文件在这里插入图片描述
2.yaml中的内容,任意。【1】

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

3.核心部分,filecontroller中的操作
在这里插入图片描述
上图中的代码

   @RequestMapping("/add")
    public String make_yaml(String old,String new1) {
        try {
            Yaml yaml = new Yaml();
            URL url = FileController.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();
        }
        System.out.println(old);
        return "file_add";
    }

4.执行效果
在这里插入图片描述

参考文献:

感谢两位大佬的经验,引用部分均有角标。
【1】全力以赴001 博客园 https://www.cnblogs.com/huzi007/p/5841699.html
【2】马哥私房菜 CSDN https://blog.csdn.net/mmh19891113/article/details/82079654

二、写入

yaml文件获取成map对象之后就是对map的操作了。
比如我要获取spring,map.get(“spring”);就能获取spring下的属性
在这里插入图片描述
要获取spring下的application。
就将上一层获取到的数据进行操作。
Map map =(Map)yaml.load(new FileInputStream(url.getFile()));
m2 = (Map) map.get(“spring”);
m2.get(“application”);以此类推
要设置就调用put。当map中有这个key就是修改,没有就是添加,这都是Map接口中的方法。不清楚的就看看Map基础。
下面上一个我的修改截图。
在这里插入图片描述

 DumperOptions dumperOptions = new DumperOptions();
                dumperOptions.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
                dumperOptions.setDefaultScalarStyle(DumperOptions.ScalarStyle.PLAIN);
                dumperOptions.setPrettyFlow(false);
                Yaml yaml2 = new Yaml(dumperOptions);
                if (map == null) {
                    map = new LinkedHashMap();
                }
                File dumpFile = new File( "F:\\代码\\java\\docker_conf\\docker_web\\src\\main\\resources\\test.yaml");
                FileWriter fileWriter = new FileWriter(dumpFile);
                yaml2.dump(map,fileWriter);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: YAMLYAML Ain't Markup Language)是一种用于序列化数据的格式,它采用简洁易读的文本形式,常用于配置文件和数据交换。在Java中,可以使用第三方库进行YAML文件读取写入。 要读取YAML文件,首先需要引入相关的库,比如SnakeYAML。然后创建一个Yaml对象,并使用其load方法来加载YAML文件。加载完成后,我们可以通过Yaml对象的get方法获取YAML文件中的数据。例如: ```java import org.yaml.snakeyaml.Yaml; import java.io.FileInputStream; import java.io.FileNotFoundException; public class YAMLReader { public static void main(String[] args) { try { Yaml yaml = new Yaml(); FileInputStream inputStream = new FileInputStream("config.yaml"); // 加载YAML文件 Object data = yaml.load(inputStream); // 获取YAML文件中的数据 System.out.println(data.toString()); inputStream.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } } } ``` 要写入YAML文件,同样需要引入相关的库,然后创建一个Yaml对象,并使用其dump方法来将数据写入YAML文件。例如: ```java import org.yaml.snakeyaml.Yaml; import java.io.FileWriter; import java.io.IOException; public class YAMLWriter { public static void main(String[] args) { Yaml yaml = new Yaml(); try { FileWriter writer = new FileWriter("config.yaml"); // 数据写入YAML文件 yaml.dump(data, writer); writer.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 在写入YAML文件时,需要将要写入的数据传递给dump方法,并指定要写入的目标文件。完成写入后,通过关闭文件流来确保数据写入完成。 总之,通过使用第三方库,Java可以方便地读取写入YAML文件,实现数据的序列化和反序列化。 ### 回答2: YAML是一种轻量级的数据序列化格式,它以易读易写的方式表示数据,并且支持多种数据类型。在Java中,我们可以使用一些第三方库来读取写入YAML文件。 要读取YAML文件,可以使用例如SnakeYAML和Jackson YAML这样的库。首先,我们需要添加相应的依赖项到项目中。接下来,可以使用流式API或对象映射API来读取YAML文件。 使用流式API,我们可以按序解析YAML文件中的数据,如下所示: ```java InputStream inputStream = new FileInputStream("file.yaml"); Yaml yaml = new Yaml(); Map<String, Object> data = yaml.load(inputStream); ``` 使用对象映射API,我们可以将YAML文件中的数据映射为Java对象,如下所示: ```java InputStream inputStream = new FileInputStream("file.yaml"); Yaml yaml = new Yaml(new Constructor(YourClass.class)); YourClass obj = yaml.load(inputStream); ``` 要写入YAML文件,我们可以使用与读取相同的库和API。下面是一个示例: ```java YourClass obj = new YourClass(); Yaml yaml = new Yaml(); String output = yaml.dump(obj); Files.write(Paths.get("file.yaml"), output.getBytes()); ``` 在这个示例中,我们首先创建了一个YourClass对象,然后使用Yaml库将其转换为YAML字符串。最后,我们将YAML字符串写入文件。 总结来说,要在Java中读取写入YAML文件,我们可以选择使用SnakeYAML或Jackson YAML这样的第三方库。使用这些库,我们可以使用流式API或对象映射API来读取写入YAML文件。 ### 回答3: 在Java中,我们可以使用不同的库来读取写入YAML文件。 要读取YAML文件,我们可以使用 Jackson 或 SnakeYAML 等库。这些库可将YAML文件解析为Java对象,以便我们可以访问和操作其中的数据。 使用 Jackson库时,我们需要添加 jackson-databind 和 jackson-dataformat-yaml 依赖项。下面是一个示例代码,展示了如何读取YAML文件并解析为Java对象: ```java import com.fasterxml.jackson.databind.ObjectMapper; import java.io.File; public class YamlReader { public static void main(String[] args) { try { ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory()); File file = new File("example.yaml"); MyObject myObject = objectMapper.readValue(file, MyObject.class); System.out.println(myObject); } catch (Exception e) { e.printStackTrace(); } } } ``` 对于写入YAML文件,我们可以使用与读取类似的方式,先创建一个Java对象,然后使用 Jackson 或 SnakeYAML 来将其转换为YAML格式,并将其写入文件。 使用 Jackson库时,我们可以使用 writeValue() 方法将Java对象写入YAML文件,示例如下: ```java import com.fasterxml.jackson.databind.ObjectMapper; import java.io.File; public class YamlWriter { public static void main(String[] args) { try { ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory()); MyObject myObject = new MyObject(); // 设置对象属性 File file = new File("example.yaml"); objectMapper.writeValue(file, myObject); } catch (Exception e) { e.printStackTrace(); } } } ``` 总之,无论是读取还是写入YAML文件,我们都可以使用不同的库来实现。在Java中,Jackson 和 SnakeYAML 是常用的选择,它们提供了简单且强大的功能来处理YAML文件

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值