java 讀寫 yaml 檔案
阿新 • • 發佈:2019-01-05
簡介
Yaml是一種“是一個可讀性高並且容易被人類閱讀,容易和指令碼語言互動,用來表達資料序列的程式語言。”類似於XML但比XML更簡潔,適合編寫配置檔案。
基本語法規則
- 大小寫敏感
- 使用縮排表示層級關係
- 縮排時不允許使用Tab鍵,只允許使用空格
- 縮排的空格數目不重要,只要相同層級的元素左側對齊即可
支援的資料結構
- 物件:鍵值對的集合,又稱為對映(mapping)/ 雜湊(hashes) / 字典(dictionary)
- 陣列:一組按次序排列的值,又稱為序列(sequence) / 列表(list)
- 純量(scalars):單個的、不可再分的值
物件(鍵值對)
物件的一組鍵值對,使用冒號結構表示:
animal: pets
陣列
一組連詞線開頭的行,構成一個數組:
- Cat
- Dog
- Goldfish
純量
純量是最基本的、不可再分的值:
- 字串
- 布林值
- 整數
- 浮點數
- Null
- 時間
- 日期
數值直接以字面量的形式表示:
number: 12.30
布林值用true和false表示:
isSet: true
時間採用 ISO8601 格式:
iso8601: 2001-12-14t21:59:43.10-05:00
日期採用複合 iso8601 格式的年、月、日表示:
date: 1976-07-31
字串預設不使用引號表示:
str: 這是一行字串
如果字串之中包含空格或特殊字元,需要放在引號之中:
str: '內容: 字串'
單引號和雙引號都可以使用,雙引號不會對特殊字元轉義:
s1: '內容\n字串'
s2: "內容\n字串"
YAML 允許使用兩個感嘆號,強制轉換資料型別:
e: !!str 123
f: !!str true
複合結構
物件和陣列可以結合使用,形成複合結構:
languages:
- Ruby
- Perl
- Python
websites:
YAML: yaml.org
Ruby: ruby-lang.org
Python: python.org
Perl: use.perl .org
java 操作 yaml 檔案
java 中用封裝好的類庫 org.yaml.snakeyaml.Yaml 操作yaml。
載入yaml 檔案,讀取內容
public void load() throws FileNotFoundException{
//初始化Yaml解析器
Yaml yaml = new Yaml();
File f=new File("test.yaml");
//讀入檔案
// load方法支援String,InputStream,Reader作為輸入
Object result= yaml.load(new FileInputStream(f));
System.out.println(result.getClass());
System.out.println( result);
}
test.yaml 檔案內容
a: 1
b: 2
輸出
class java.util.LinkedHashMap
{a=1, b=2}
一個yaml檔案中可以存入多組配置並使用loadAll進行讀取,多組之間使用三個橫槓分開
public void loadall() throws FileNotFoundException {
Yaml yaml = new Yaml();
File f = new File("test.yaml");
Iterable<Object> result = yaml.loadAll(new FileInputStream(f));
for (Object obj : result) {
System.out.println(obj.getClass());
System.out.println(obj);
}
}
loadAlll()返回的是一個Iterable,每個物件的解析是在遍歷到的時候進行的是懶載入的。
test.yaml 檔案內容
a: 1
b: 2
---
c: 3
輸出
class java.util.LinkedHashMap
{a=1, b=2}
class java.util.LinkedHashMap
{c=3}