有些时候,可能会需要你通过程序读取、操作、修改、写入ini
格式的配置文件,作为一个java程序员,我们应该怎么去操作呢?
先看看.ini
格式的文件是什么样子的:
[base]
name=jack
age=20
# 注释
[user] # 也是注释
username=AAA
其实这种格式的配置文件不是特别常见,扩展名也不一定就是.ini
,有时候还可能叫做.config
。当然了,扩展名这种东西,其内容取决于创建这个文件的人。
从我个人角度来讲,其实如果把这种格式的文件简单的抽象一下,他是跟properties十分类似的:
base.name=jack
base.age=20
user.username=AAA
mini-ini
是一个java编写的ini配置文件读写库,它可以对上述那种格式的文件进行读写、操作,也可以直接转化为Properties进行操作。
此项目的项目地址是:(github) https://github.com/ForteScarlet/mini-ini
(gitee) https://gitee.com/ForteScarlet/mini-ini
这个项目是刚刚出现的,还没有什么star,如果你觉得它不错,请务必给作者的仓库点个star
以表示支持与鼓励~
废话不多说,简单讲讲这个库怎么用。
<!-- https://mvnrepository.com/artifact/love.forte/mini-ini -->
<dependency>
<groupId>love.forte</groupId>
<artifactId>mini-ini</artifactId>
<version>1.0.0</version>
</dependency>
// https://mvnrepository.com/artifact/love.forte/mini-ini
compile group: 'love.forte', name: 'mini-ini', version: '1.0.0'
该库没有什么额外依赖,你可以前往上面说的github或者gitee中的releases中下载他的jar包。
注:
mini-ini
有较为完整的readme文档,你可以尝试直接前往他的github(英文)或者gitee(中文)查看文档。不过看英文的话需要注意,他文档的英文基本都是Google翻译出来的。
下面我写的demo示例代码也全部来自github的文档。
// 得到输入流
InputStream iniInput = Demo1.class.getClassLoader().getResourceAsStream("test.ini");
// 通过默认的bufferedIniReader类读取ini文件
IniReader ir = new BufferedIniReader();
Ini ini = ir.read(iniInput);
// 打印展示
System.out.println(ini);
// 转化为properties文件并展示
ini.toProperties().forEach((k, v) -> {
System.out.println(k + "=" + v);
});
// Create an IniBuilder and
IniBuilder b = new IniBuilder()
.plusComment("this is a test ini")
.skipLine(2)
.plusSection("sec1", "this is a section")
.plusProperty("key1", "value")
.plusProperty("key2", "value")
.plusProperty("key3", "value")
.plusProperty("key4", "value")
.plusProperty("key5", "value")
.plusProperty("key6", "value")
.plusSection("sec2")
.plusProperty("key1", "value")
.plusProperty("key2", "value")
.plusProperty("key3", "value")
.plusProperty("key4", "value")
.plusProperty("key5", "value")
.plusProperty("key6", "value")
;
// Build ini
final Ini ini = b.build();
// show
System.out.println(ini);
// Write to file
ini.write(Paths.get("F:\\test3.ini"), true);
上述的读写是库默认提供的读写方式,但是有时候可能无法满足需求(例如在默认读取写入情况下,key-value的后面不允许出现注释),这时候你可以通过库中所提供的接口来实现自己的解析器,甚至还可以增加一些其他的元素。
至于如何自定义、提供了什么接口,你可以直接去看github或gitee的文档,这里不再做过多赘述。
很简单不是吗?至少我觉得操作起来是很方便的,如果你觉得这个库还可以,不妨试一试,并且给作者点个star
表示一下~ 大家都是程序员,何不相互鼓励一下呢?
当然,如果你有更好的想法、更好的库推荐,欢迎互相分享,如果有什么讲得不对的地方,敬请谅解。