Yaml文件有本身独立的语法,经常使用做配置文件使用,相比较于xml和json而言,减小不少没必要要的标签或者括号,阅读也更加清晰简单;本篇主要介绍下YAML文件的基本语法,以及如何在Java中实现读写逻辑java
<!--more-->git
#
表示单行注释一个简单的数组,用-
来列出便可,以下github
- apple - orange - banana
一个简单的kv对象json
fruit: name: banana amount: 3 price: 4.99
加载后数据结构以下:数组
首先大结构是数组,可是数组内部是一个kv结构的对象数据结构
- name: apple price: 1.23 - name: orange price: 1.33 - name: banana price: 2.33
加载后数据结构以下:app
首先大结构是对象,对象内部的成员是数组maven
name: - apple - orange - banana price: - 4.99 - 2.34 - 3.99
加载后数据结构以下:学习
- [apple, 3.88] - [orange, 3.99] - [banana, 2.99]
用中括号包括起来,造成一个二维数组,加载后的数据结构以下测试
对于kv结构的对象,支持经过大括号的方式来替代,简化配置文件的行数
love: {name: apple, price: 2.99} hite: {name: orange, price: 1.99}
上面的配置,等同于
love: name: apple price: 2.99 hite: name: orange price: 1.99
在Java生态环境中,读写YAML文件算是比较简单的一个事情了,一个是本身读取文件,而后按照语法进行解析(属于本身造轮子);另一个就是利用开源库来读写,这里固然是选择已经颇为完善的开源库来处理了
pom文件中添加maven依赖,版本号查询最新的便可
<dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>1.17</version> </dependency>
public class YamlUtil { public static InputStream loadStream(String path) throws IOException { if (path.startsWith("http")) { URL url = new URL(path); return url.openStream(); } else if (path.startsWith("/")) { return new FileInputStream(path); } else { return YamlUtil.class.getClassLoader().getResourceAsStream(path); } } public static <T> T loadConf(String path, Class<T> clz) throws IOException { try (InputStream inputStream = loadStream(path)) { Yaml yaml = new Yaml(); return yaml.loadAs(inputStream, clz); } } public static <T> void dumpConf(String save, T obj) throws IOException { Yaml yaml = new Yaml(); yaml.dump(obj, new BufferedWriter(new FileWriter(save))); } }
实现比较简单了,直接利用 Yaml对象的 loadAs/dump 方法便可,对于测试用例,前面的截图已经给出,再也不赘述
核心语法:
#
表示单行注释转义demo:
comment: '#' skip: "abc\n123"
对应测试用例及输出
@Test public void testYamlUtil() throws IOException { TC map = YamlUtil.loadConf("test.yml", TC.class); System.out.println(map); } @Data @AllArgsConstructor @NoArgsConstructor public static class TC { private String comment; private String skip; }
输出结果
YamlUtilTest.TC(comment=#, skip=abc 123)
一灰灰的我的博客,记录全部学习和工做中的博文,欢迎你们前去逛逛
尽信书则不如,已上内容,纯属一家之言,因我的能力有限,不免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激