序言
周六晚上,稍有点空,就想着是不是做一个INI的处理器?
它应该具有如下特性:
- 支持匿名Section
- 支持有名Section
- 相同Section中支持同名键值
- 支持注释
- 支持转码
- 支持流式读入
- 支持流式写出
- 可以方便的对INI内容进行修改
- 可以方便的对INI内容进行获取
说干就干,主要的程序1个小时就写完了,但是在正则匹配方面碰到了困难,弄了快2个小时还是没有解决彻底,幸好北京的开涛同学,出手相助给解决了。
今天进行了一下重构和测试,基本上比较舒服了,于是写篇文章进行总结:
类结构
对于INI的描述,采用了三个类来进行描述,一个INI文件对应于一个Sections,一个Sections可以包含多个Section,暂时不支持同名Section。
一个Section可以包含多个值对。
对INI结构的操作
对于INI的操作,最后是由IniOperator进行的,它从三个接口继承而来,三个接口分别对应于基础操作,值对操作和值操作。
代码实现统计
从上面的统计看,总共的代码行数是451行--一开始没有加对注释的支持,只有300行左右,由于增加了注释方面的支持,容量增加了50%。
示例
1
2
3
|
String string =
";abc\naa=bb;ccc\r\n[ccc];ddd\naa=bb;ccdd\r\nccc=ddd;aa;bb;cc"
;
operator.read(
new
StringBufferInputStream(string),
"UTF-8"
);
operator.write(System.out,
"UTF-8"
);
|
1
2
3
4
5
|
;abc
aa=bb;ccc
[ccc];ddd
aa=bb;ccdd
ccc=ddd;aa;bb;cc
|
总结
欢迎大家获取TinyIni并提出修改意见。
源码地址:
http://git.oschina.net/tinyframework/tiny/
http://git.oschina.net/tinyframework/tiny/tree/master/framework/org.tinygroup.ini
问题列表
http://git.oschina.net/tinyframework/tiny/issues