最近一段時間接觸了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在做怪。。
以上是本人在使用過程當中遇到的問題,在此,再次感謝飛總和達子。