最近在做项目的时候,发现有一个导出数据成DBF文件的功能的异常。导出的DBF文件用VFP或者打开,发现数据错位的现象,本该属于前一列的数据跑到后面那一列去了,这是问题一。还有一个问题,有的数据导出去以后出现了乱码,而且数据错位很严重,根本没有一条数据可以看的。而且tomcat是不报任何错误的。
之前没整过读写DBF文件这类的东西,也不太明白这个到底是什么原因,跟了一下代码,发现写进去的数据没有乱啊,而且编码设置的GBK,写中文也不会乱码啊,都很正常。纠结了很长时间,从网上找了很多读写DBF的例子,跟我项目的也大相径庭,于是又将javadbf-0[1].4.0.jar这个里面的各个类反编译了,研究了一番,也没发现什么蛛丝蚂迹对我有帮助..............
然后我发现导出的DBF文件是从某一列以后开始产生数据错位的,该DBF总共有5列:目录号、文件号、题名、总页数、负责人。本该属于题名的列数据全都跑到总页数里面去了,后面的各列数据也都往后偏移一列。于是查看了导出的DBF文件的表结构,居然意外的发现题名那一列的宽度是0,检查代码,在代码里写进去的列宽度分别是20、30、512、30、20,因为考虑到题名字段的内容比较多,所以故意将其长度设的比较大,可是不明白为什么他会变成0呢,看了DBFField.java的setFieldLength方法,如果传进去的时候就是0的话,他应该会打印Field length should be a positive number这一句话的,
public void setFieldLength(int value)
{
if (value <= 0)
{
throw new IllegalArgumentException("Field length should be a positive number");
}
if (this.dataType == 68)
{
throw new UnsupportedOperationException("Cannot do this on a Date field");
}
this.fieldLength = value;
}
没有