我有一个场景,员工记录以平面文件的形式编写,类似于:
flatFile.txt
============
1|name1|dept1|10000
2|name2|dept2|12000
3|name3|dept3|9500
....
....
现在我想要读取这个平面文件,将上述员工记录转换成一些新的XML文件,最终我应该拥有包含以下数据的XML文件:
<EMPLOYEES>
<EMPLOYEE>
<ID>1</ID>
<NAME>name1</NAME>
<DEPARTMENT>dept1</DEPARTMENT>
<SALARY>10000</SALARY>
</EMPLOYEE>
<EMPLOYEE>
<ID>2</ID>
<NAME>name2</NAME>
<DEPARTMENT>dept2</DEPARTMENT>
<SALARY>12000</SALARY>
</EMPLOYEE>
...
...
</EMPLOYEES>
现在要实现这个概念,我需要注意数据的验证,例如:
- id和salary应该是数字
- 名字长度应该小于20
- 一个平面文件的单行应包含以上4个字段
<NAME type="Error" Line="2"></NAME> (name length is greater than 20 in 2nd record of a flat file)
或者
<EMPLOYEE type="Error" Line="1"></EMPLOYEE> (first record doesn't contains enough fields)
现在的应用程序需要以组件化、可替换的方式进行设计。例如,应该可以基于分隔符将解析输入文件的解析器替换为将其解析为固定长度的另一个解析器。
因此,我需要以分层的方式设计这个概念。
Parsing -> Validation -> Output Generation.
为了实现这个概念,我想出了以下方法:
- 使用BufferedReader读取文件中的所有记录,并使用StringTokenizer将其进行分词。
- 为每个记录初始化一个雇员对象,然后将它们添加到某个集合(List)中。
- 将错误(字段不匹配或任何其他验证失败)保存在Map<中。
- 使用一些XML Builder API(不清楚哪个最好)将列表写入或Marshal到xml中。
有没有人能给我更好的建议或任何实现提示?