org.ini4j.Ini异常行为:未执行编辑却修改配置文件
问题分析与解决方案
核心原因:org.ini4j的转义字符解析机制
这不是防火墙或杀毒软件的问题——你已经通过ProcMon验证了无异常文件修改,且换环境复现,说明根源在org.ini4j.Ini库的默认行为:
- 该库默认会解析INI文件中的转义字符,
\t会被识别为制表符(Tab)。 - 当你的代码读取
imagePath = C:\tmp时,库会把\t解析成Tab字符;如果后续存在隐式的INI文件保存操作(哪怕你没显式调用save(),比如某些场景下库会自动持久化修改后的Ini对象,或者代码中其他地方不经意修改了Ini实例),Tab字符会被写入文件,显示出来就是C: mp(Tab在文本中看起来像多个空格)。
解决方案
1. 禁用org.ini4j的转义解析
创建Ini实例时,关闭转义解析功能,让库直接读取原始字符串:
Ini ini = new Ini(); // 禁用转义字符解析 ini.getConfig().setEscape(false); ini.load(new File("config.ini"));
2. 修改配置文件的路径写法
在INI文件中使用双反斜杠表示路径分隔符,避免转义:
[other] imagePath = C:\\tmp
3. 排查隐式保存操作
检查代码中是否存在以下可能触发保存的场景:
- 是否有其他方法修改了Ini对象的属性(哪怕是无关项),导致库自动触发保存;
- 是否在某处调用了
ini.store()或ini.save()方法却被忽略; - 是否使用了库的某些自动持久化特性(比如关联了File对象后,某些操作触发自动写入)。
内容的提问来源于stack exchange,提问作者Erhard
相关产品推荐
相关产品推荐

