最近做项目需要跟一些老系统进行数据交换,数据格式为DBF文件;我们使用JavaDBF读写文件,虽然这个处理工具很简单,不过已经够用了(另:由于这个项目已经没人维护了,所以网上提到的中文处理问题也只好自己改一下源码了)。
后来发现每处操作DBF文件的代码都很相似,但又存在差异,这些差异主要来自于每个DBF文件字段的个数、类型、顺序等信息不一致引起的;为了把这些重复又难看得代码抽取成工具类,我觉得引入一个xml配置文件来处理比较合理,而不是设计一个由多个参数重载形成的一系列公共方法;可能有些人对于配置文件已经满天飞的J2EE添加配置比较敏感,不过我觉得这样添加一个配置文件还是很有意义的,在DBF文件字段发生变化时,只需要添加和修改XML配置文件即可,代码改动量很少。
配置文件属性字段主要记录以下信息:标题、映射到列表的对象字段名、列名、类型、长度、精度等,其实可以根据你自己的需要,添加一些额外的属性;比如说枚举值的Id和Code的转换,我会添加class="com.numenzq.vo.EnumData" alias="name"这两个属性来处理。
- < property title = "地址" name = "customer.address" column = "address" type = "C" length = "50" />
- < property title = "邮编" name = "customer.postalCode" column = "postalCode" type = "C" length = "6" />
- < property title = "金额" name = "amount" column = "amount" type = "N" length = "10" scale = "2" />
<property title="地址" name="customer.address" column="address" type="C" length="50" /> <property title="邮编" name="customer.postalCode" column="postalCode" type="C" length="6" /> <property title="金额" name="amount" column="amount" type="N" length="10" scale="2" />
DBF工具类提供出来的两个读写方法如下:
- List readDbf(File file, Class clazz, String templateName)
- InputStream writeDbf(List beans, String templateName)
List readDbf(File file, Class clazz, String templateName)
InputStream writeDbf(List beans, String templateName)
这样处理完全是依赖于配置文件的各属性字段的参数和顺序来读取文件和写文件,用反射写出来的代码除了异常一大堆,比较难看以外;还是有点影响性能的。
其实根据以上的思路,只需稍作修改,就可以写出比较简洁的读写Excel、Txt等不同格式的文件。尽可能的让程序看上去比较清爽。附件是以上方案的一个参考demo,有兴趣的朋友可以看看。