锁定老帖子 主题:解析Txt文件的过程
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-11-05
项目需要解析用逗号(,)分隔的文本文件,然后将其中的数据转换成xml文件进行导入到财务系统中.... 考虑到以后可能文件格式会变化,因此使用了动态的创建方法,即通过格式文件来动态解析txt文件..本程序使用了apache的Digester来动态生成格式文件,使用CGLib动态生成目标类.步骤如下: 1、定义文件和字段的元数据格式,如果出现其他的文件格式只需要实现元数据接口即可..接口代码: java 代码
本例使用的是逗号分隔,如果出现其他分隔符怎么办?为此,定义了一个分隔符接口:LineSpliter java 代码
此处缺省实现了此接口,用于逗号分隔DefaultLineSpliter,定义如下: java 代码
比如:如果行数据为aaa,bbb,,,,, 通过jdk的实现会返回aaa和bbb,而通过Lang包处理会返回包括后面空的字段. 2、接下来使用DigesterDigester包根据xml规则生成对象.. 首先需要了解digester包的使用方法,这里简单的说一下:disgeter可以根据一定的规则将xml文件解析成一组对象...具体这里,我先定义 一个规则文件, xml 代码
接着定义缺省的文件元数据文件,格式如下: xml 代码
代码如下:GeneratorObject.createObject(){} 初始化CGLib java 代码
java 代码
java 代码
本例综合使用了apache的代码包,灵活实现了文本文件的解析... 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-11-05
disgeter包,这个包是什么啊?百度和google都没搜到
|
|
返回顶楼 | |
发表时间:2007-11-05
楼主笔误,应该是Digester吧.呵呵.
|
|
返回顶楼 | |
发表时间:2007-11-06
呃 有没有搞错 这么简单的任务 写了这么多代码 |
|
返回顶楼 | |
发表时间:2007-11-06
[quote="coolnight"] 呃 有没有搞错 这么简单的任务 写了这么多代码 [/quote] 主要是为了解决文件格式的变化给系统带来的麻烦...如果针对每种格式文本文件都实现一个解析方法,难道不怕麻烦吗?? |
|
返回顶楼 | |
发表时间:2007-11-06
从LZ这学到一招了,Digester,不错,回去试试
以前不想自己写配置文件的解析,都是拿spring来做的。 现在也在做这方面的东西, 感觉TXT如果只是分割符变化了,还比较好对付, 但是如果是格式彻底变了呢,比如行列的位置都变换了, 你抽象的这个构架该怎么对付呢? |
|
返回顶楼 | |
发表时间:2007-11-06
Digester解析XMl用的
|
|
返回顶楼 | |
发表时间:2007-11-06
[quote="kusix"]从LZ这学到一招了,Digester,不错,回去试试 以前不想自己写配置文件的解析,都是拿spring来做的。 现在也在做这方面的东西, 感觉TXT如果只是分割符变化了,还比较好对付, 但是如果是格式彻底变了呢,比如行列的位置都变换了, 你抽象的这个构架该怎么对付呢?[/quote]
如果行列的位置变了,只需要在xml配置文件里面调整一下顺序就可以了...这也是digester的主要作用,动态生成格式文件... |
|
返回顶楼 | |
发表时间:2007-11-07
试了一下digester,找了半天,没发现怎么调用Map的put方法,
也就是说,<set-next-rule methodname="add"/> 这个标签,只能调用参数数目是1的方法,怎么才能调用1个以上参数的方法呢? call-method-rule 貌似只能调用自身的方法,无法调用父亲的方法 |
|
返回顶楼 | |
发表时间:2007-11-07
非的把对象搞成
public void addDict(Dict dict) { dictMap.put(dict.getDictName(),dict); } 这样的,才行,感觉很别扭。 |
|
返回顶楼 | |