方案對比
| 格式 | 優點 | 缺點 | 適用場景 |
| 純文本 | 簡單、人類可讀 | 解析麻煩、無結構、併發差 | 極簡配置、日誌 |
| Properties | JDK 內置、鍵值對、ISO-8859-1 | 不支持嵌套、中文需轉義 | 簡單配置項 |
| XML | 結構豐富、Schema 驗證、生態成熟 | 冗長、解析較慢 | 配置文件、數據交換 |
| JSON | 輕量、原生對應對象、解析快 | 無註釋、無 Schema | 數據存儲、API 交互 |
| SQLite | SQL 查詢、事務、索引、併發 | 需引入庫、文件鎖 | 結構化數據、中大型項目 |
推薦:JSON + Jackson/Gson
// 寫入
List pets = ...;
String json = new ObjectMapper().writeValueAsString(pets);
Files.writeString(Paths.get("pets.json"), json);
// 讀取
List pets = new ObjectMapper().readValue(
Files.readString(Paths.get("pets.json")),
new TypeReference>() {}
);
XML 方案
- JAXP (DOM/SAX) — JDK 內置,冗長。
- DOM4J / JDOM2 — API 友好,需引入依賴。
- 適合需 XPath、XSLT、Schema 驗證的場景。
併發與一致性提示
- 文件鎖:
FileChannel.lock() 或第三方庫(如 java.nio.file 的 Files.write 原子性替換)。
- 寫入策略:寫臨時文件 →
Files.move(temp, target, REPLACE_EXISTING, ATOMIC_MOVE)。
- 讀多寫少:啟動載入內存,定期持久化;寫多讀少:考慮嵌入式數據庫(H2、SQLite)。