一.读取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);