使用ini4j的ini.store()写入INI文件时如何去除等号两侧空格?
解决ini4j store()方法自动在键值对中添加空格的问题
我之前也碰到过ini4j这个默认格式化的小坑,确实不符合咱们想要的原文件格式😅,不过通过自定义格式化器就能轻松解决,具体步骤如下:
1. 自定义IniFormatter子类
我们需要重写ini4j默认的格式化逻辑,让它输出不带空格的key=value格式:
import org.ini4j.Ini; import org.ini4j.IniFormatter; import java.io.Writer; import java.io.IOException; public class NoSpaceIniFormatter extends IniFormatter { @Override protected void format(Ini.Section section, String key, String value, Writer writer) throws IOException { // 直接输出无空格的键值对 writer.write(key); writer.write('='); writer.write(value); writer.write(System.lineSeparator()); } }
这个子类继承了父类的大部分逻辑,只修改了键值对的输出规则,section的格式(比如[section])会保持和原文件一致。
2. 使用自定义格式化器保存文件
在调用store()方法时,不要用无参的重载,而是指定我们刚才写的NoSpaceIniFormatter:
import org.ini4j.Ini; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; public class Main { public static void main(String[] args) { try { Ini ini = new Ini(new File("config.ini")); // 这里做你的修改操作,比如修改某个键的值 ini.getSection("section1").put("key1", "newValue"); // 使用自定义格式化器保存 try (Writer writer = new FileWriter("config.ini")) { ini.store(writer, new NoSpaceIniFormatter()); } } catch (IOException e) { e.printStackTrace(); } } }
这样保存后的INI文件就会严格保持key=value的无空格格式,和原文件的格式一致了。
内容的提问来源于stack exchange,提问作者Peng
相关产品推荐
相关产品推荐

