Java解析DBF文件,其中遇到的些问题及解决办法
最近要做一个程序,数据源是DBF的文件,我用Java解析它,首先需要下载个Java专用jar包javadbf-0.4.0.jar,这个是最新版的。解析代码如下:
public static void main(String[] args) {
try{
Object[] obj=null;
//创建文件流
InputStream is=new FileInputStream("Q.DBF");
//初始化DBFReader实例
DBFReader df=new DBFReader(is);
//设置编码格式,有时候解析出来的数据有乱码的,就可以加上这句
df.setCharactersetName("gb2312");
//得到文件字段数
int fileCount=df.getFieldCount();
//取出字段信息
for(int i=0;i<fileCount;i++){
DBFField field=df.getField(i);
// System.out.print(field.getName()+"\t");
}
System.out.println();
int i=0;
while((obj=df.nextRecord())!=null){ //解析有些DBF文件时在这句会报错,也就是读取数据转成Object数组时出错
for(int j=0;j<obj.length;j++){
System.out.print(obj[j]+"\t");
// System.out.println(obj[1]);
}
if(i++>20)break;
System.out.println();
}
is.close();
}catch(Exception ex){ex.printStackTrace();}
}
发现错误一:
while((obj=df.nextRecord())!=null){ //解析有些DBF文件时在这句会报错,也就是读取数据转成Object数组时出错 。
错误:Failed to parse Number: For input string: "-.---" ,经过我仔细查找和查看DBF源文件,发现是因为DBF文件里有特殊字符无法解析造成的。不得与情况下,找到了javadbf-0.4.0.jar 源码。经过调试把里面DBFReader类里面的:
case 'N':
try {
byte t_numeric[] = new byte[ this.header.fieldArray[i].getFieldLength()];
&