发一篇处理ini、conf文件新思路的帖子吧,解决实际问题相当的方便。
inieditor的这个工具类来操作ini、conf的用法我就不多说了,网上一搜一大堆,我说一下如何扩展这个工具的思路,本人已做扩展,由于属于公司应用的东西不便上传,这里只说扩展思路及其使用的便捷性。下面举例
我要操作文件如下格式
[test]
name = se
age = 18
sex = 男
spcil = 无胸(女的有胸,好像有点不恰当,将就着看吧,重要的是处理过程)
这里的test称之为section;name,age称之为key;se、18称之为value;
文件对应的实体类为Person.java
public class Persoin{
private Stirng name;
private int age;
private String xb;
private String specil;
.....省略get/set方法
public void aa(){
//省略一些操作
}
}
常规的做法就是Inieditor conf = new Inieditor();加载文件,conf.get("test", name) 再把值放在对象中,存储的时候也是这样,这样属性少的时候没有什么关系,一旦属性特别多如10,20个的时候,你的java中就都是结构相同的代码,除了section,key不同,下面才是重点。
我们完全可以团通过注解+反射简化这样的存储操作,甚至加上我们通用的逻辑关系来完成存取的工作,最终达到的效果就是一行顶10行。接下来说说怎么做
例如我定义注解
@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)
public @interface Test {
/**
* ini或是conf中对应的key值,如果key不指定,那么文件中key与类中的属性名称一致
* @return
*/
String key() default "";
/**
* 属性的实际值与我期待的值一样
* @return
*/
String assertValue() default "";
/**
* 忽略那些属性
* @return
*/
String[] ignore() default {};
/**
* 要调用的方法
* @return
*/
String callMethod() default "";
}
此时Persion类改为如下
public class Persion{
@Test(key="name")
private String name;
@Test
private int age;
@Test(key="sex", assertValue=“男”, callMethod=“aa”)
private String xb;
@Test
private String specil;
. ....省略get/set方法
public void aa(){
//省略一些操作
}
}
接下来通过反射解析注解,当解析到xb的属性为“男”时,发现与注解断言的值是一样,这时就可以调用类中“aa”方法,对Persion中的一些属性值作调整,从而实现逻辑关系的处理。最终通过将属性值通过注解的方式全部保存到文件中。
如果你的注解扩张的相当的完善,包括对属性值改变的顺序、或是对文件添加线程的安全操作,那么当你执行存储的操作时,可能只需要几行代码,而且通用性特别强!!!!
Inieditor + 注解 + 反射 简化ini、conf文件操作的处理思路大致就是这样。 希望对您有所帮助~~~~~~