Java需借助ini4j等第三方库读写INI文件,支持节、键值对、注释解析;可内存修改后store保存;简易手写解析仅适用于无注释无转义的简单场景。

Java 本身不直接支持 INI 文件的读写,但可以通过第三方库(如 ini4j)或手动解析来实现。推荐使用 ini4j,它轻量、稳定、API 清晰,能正确处理节(section)、键值对、注释和空行。
使用 ini4j 读取 INI 文件
添加 Maven 依赖:
<dependency><groupId>org.ini4j</groupId>
<artifactId>ini4j</artifactId>
<version>0.5.4</version>
</dependency>
读取示例:
- 用
Ini类加载文件:Ini ini = new Ini(new File("config.ini")); - 获取某个节下的值:
String host = ini.get("database", "host"); - 获取整个节为 Map:
Map<String, String> dbSection = ini.get("database"); - 遍历所有节:
for (String section : ini.keySet()) { ... }
使用 ini4j 修改并保存 INI 文件
修改是直接在内存中操作 Ini 对象,再调用 store() 写回磁盘:
立即学习“Java免费学习笔记(深入)”;
- 新增或更新键值:
ini.put("database", "port", "3307"); - 新增节:
ini.add("cache"); ini.put("cache", "enabled", "true"); - 删除键:
ini.remove("database", "password"); - 删除整节:
ini.remove("logging"); - 保存到原文件:
ini.store(new FileOutputStream("config.ini"));
不依赖第三方库的简易解析(适合简单场景)
若仅需读取无嵌套、无转义、无注释的纯 INI,可手写解析器:
- 逐行读取,跳过空行和以
;或#开头的注释行 - 遇到
[section]格式时记录当前节名 - 遇到
key=value时,按第一个=拆分,去除首尾空格后存入Map<String, Map<String, String>> - 注意:不处理引号包裹、反斜杠转义、多行值等复杂情况
注意事项与常见问题
-
编码问题:INI 文件常为 GBK 或 UTF-8(带 BOM),读取时显式指定编码,如
new InputStreamReader(new FileInputStream(f), "UTF-8") -
线程安全:
Ini实例不是线程安全的,多线程读写需加锁或每次新建实例 -
路径分隔符:Windows 下路径用反斜杠,建议统一用
File.separator或正斜杠 -
权限与异常:读写前检查文件是否存在、是否有读写权限,并捕获
IOException


















