snakeyaml基础用法
- 引包
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>1.23</version>
</dependency>
- 定义一个简单的yaml文档:user.yaml
name: 张三
sex: 男
age: 26
- 读取
File file = new File("user.yml");
if (file.exists()) {
Yaml yaml = new Yaml();
User user = yaml.loadAs(new FileInputStream(file), User.class);
System.out.println(user);
}
- 序列化
// 用于配置yaml文件中对应tag响应解析成的对象
Representer representer = new Representer();
//representer.addClassTag(Car.class, new Tag("!car"));//这里!car就会使用Car类型来解析,而不需要再配置文件中写全car的包名
representer.addClassTag(User.class, Tag.MAP);//会使用User对map的类型进行解析,不会生成!!和包路径
// 这个是在dump时,控制输出的宽度,对齐,类类型等相关信息
DumperOptions options = new DumperOptions();
options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);// 普通yml格式
//options.explicitStart(true);//会有感叹号
//options.setWidth(50);
//options.setIndent(4);
Yaml yaml = new Yaml(representer, options);
yaml.dump(user, new FileWriter("user.yml"));
-
其他
-
resolver
用于隐式识别对应类型,只要符合了对应的pattern就会使用对应的tag进行解析
yaml.addImplicitResolver(new Tag("!dice"), Pattern.compile("\d+d\d+"), “123456789”); -
constructor
用于配置构造对象的创建过程 -
load()返回Object,参数可以为字符串,文件流,字符流
public Object load(String yaml)
public Object load(InputStream io)
public Object load(Reader io)
可以使用List或者Map接收 -
loadAll())返回Object的迭代器,参数可以为字符串,文件流,字符流
public Iterable loadAll(String yaml)
public Iterable loadAll(InputStream yaml)
public Iterable loadAll(Reader yaml)
如果文件中含有—进行分组,则loadAll()迭代出每组数据 -
loadAs()返回指定对象,参数可以为字符串,文件流,字符流
public T loadAll(String yaml,Class type)
public T Iterable loadAll(InputStream yaml,Class type)
public T Iterable loadAll(Reader yaml,Class type)
如果不指定类类型,用load()也可以返回指定对象文件中在第一行写上对应的类路径 — !!cn.xxx.yaml.demo.user
如果不想写,可以创建Yaml对象时传入Constructor对象 -
yuml生成