最近一段时间接触了yaml,做为一种序列化语言,yaml的可读性彷佛要比xml更容易理解,比csv要更轻量级。目前,yaml做为项目中自动化框架的一种数据配置文件,在使用过程当中受到必定的好评~下面总结一下在实际使用中的心得。框架
yaml的样式:函数
yaml的使用方法:this
1 private String yamlFile; 2 3 private HashMap<String, HashMap<String, String>> ml; 4 5 /** 6 * @function 构造函数 7 */ 8 public YamlUtil() { 9 yamlFile = "test"; 10 this.getYamlFile(); 11 } 12 13 /** 14 * @function 加载yaml文件 15 */ 16 @SuppressWarnings("unchecked") 17 public void getYamlFile() { 18 19 File f = new File("test/" + yamlFile + ".yaml"); 20 try { 21 ml = Yaml.loadType(new FileInputStream(f.getAbsolutePath()),HashMap.class); 22 } catch (FileNotFoundException e) { 23 e.printStackTrace(); 24 } 25 } 26 27 /** 28 * @function 获取yaml文件中对应关键字信息 29 * @param keyword 30 * @return 31 */ 32 public Map<String,String> getKeyWordInfos(String keyword) { 33 34 HashMap<String,String> map = new HashMap<String,String>(); 35 map = ml.get(keyword); 36 return map; 37 } 38 }
yaml遇到的小坑:编码
一、注意冒号的全半角....这个很少说了啊spa
二、key值不能为全数字code
test.yaml:xml
33033:
name:driver
age:24
这种状况下,在使用ml.get(keyword)的时候获取的结果是nullblog
三、编码格式问题,若是使用中文请用UTF-8,不能够为UTF-8-BOM格式。get
这种样式,在使用过程当中ml.get(keyword)时,一样获取的结果是null。hash
/** * @function 获取yaml文件中对应关键字信息 * @param keyword * @return */ public Map<String,String> getKeyWordInfos(String keyword) { HashMap<String,String> map = new HashMap<String,String>(); for (String key : ml.keySet()){ System.out.println(key.charAt(0)); if (key.equals(keyword)){ map = ml.get(keyword); } } return map; }
在执行key.equals(keyword)时,key是father,keyword也是father可是实际运行的结果是false,进一步分析发现,key和keyword的hashcode并不相等,key.charAt(0)的值是"",当时有点蒙圈。获取key的前3个字节发现结果以下,这是UTF-8的一种表现形式。最终尝试才发现是UTF-8-BOM在做怪。。
以上是本人在使用过程当中遇到的问题,在此,再次感谢飞总和达子。