今天总结一篇工具箱文章。

  ini 类型文件通常作为程序的初始化文件。不同于我们常见的配置文件通篇 key-value 的键值对形式,ini 文件在键值对的基础之上还有分类节点,比如我们常见的 Mysql 数据库的初始化配置文件 my.cnf或my.ini,其内容格式通常是如下这样的:

复制代码
[client] port = 3306 socket = /data/3306/mysql.sock  [mysqld] user = mysql port = 3306 socket = /data/3306/mysql.sock basedir = /usr/local/mysql datadir = /data/3306/data
复制代码

  对于这种格式的文件的读取操作,Java中常用 Properties 类是不太好使的。当然,你也可以自己凭着高超的撸码水平去手写工具方法进行读写操作,但肯定还是比较费神的。实际上我们有第三方工具类库可供选择。此处博主分享的类库叫 org.dtools.javaini。整个工具包很轻便,能够支持基本的读写,格式校验等,官方教程很详细,花很少的时间就能上手。当然,结合项目的使用情况,自己还是需要自己进一步封装些方法以便更好的使用。前人种树,后人乘凉,博主也抛转引玉的写了几个:

复制代码
package module.ini;  import com.alibaba.fastjson.JSONObject; import org.dtools.ini.*; import java.io.File; import java.io.IOException; import java.util.Iterator; import java.util.Map; import java.util.Set;  /**  * @date: 2019/10/16 19:11  * @author: chen  * @desc: org.dtools.javaini-v1.1.00.jar 工具包读写ini 文件工具类  */public class IniUtil {      // ini 文件抽象表示    private static IniFile iniFile = null;     // 要操作的文件实例    private static File file = null;      // 操作 ini 文件的阅读器和书写器,通过它们来进行具体的读和写操作    private IniFileReader iniFileReader = null;     private IniFileWriter iniFileWriter = null;      /**      * @param filePath      文件路径      * @param caseSensitive 是否区分大小写 默认false      * @param validator     格式校验器      */    public IniUtil(String filePath, IniValidator validator, boolean caseSensitive) {         file = new File(filePath);         iniFile = new BasicIniFile(validator, caseSensitive);         try {             init();         } catch (IOException e) {             e.printStackTrace();         }     }      public IniUtil(String filePath) {         this(filePath, new IniValidator(), false);     }      public IniUtil(String filePath, IniValidator validator) {         this(filePath, validator, false);     }      public IniUtil(String filePath, boolean caseSensitive) {         this(filePath, new IniValidator(), caseSensitive);     }      /**      * 初始化 ini 文件的阅读器和书写器      */    private void init() throws IOException {         iniFileReader = new IniFileReader(iniFile, file);         iniFileWriter = new IniFileWriter(iniFile, file);         iniFileReader.read();     }      /**      * 读取 ini 文件转换数据为 Json对象      */    public JSONObject getIniFileInfo() {         Iterator<IniSection> sectionIterator = iniFile.iterator();         JSONObject jsonObject = new JSONObject();         while (sectionIterator.hasNext()) {             IniSection section = sectionIterator.next();             Iterator<IniItem> itemIterator = section.iterator();             JSONObject child = new JSONObject();             while (itemIterator.hasNext()) {                 IniItem item = itemIterator.next();                 child.put(item.getName(), item.getValue());             }             jsonObject.put(section.getName(), child);         }         return jsonObject;     }      /**      * 获取某个节点下的所有键值对      */    public JSONObject getIniBySection(String sectionName) throws