最近要做一个程序,数据源是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()];
dataInputStream.read( t_numeric);
t_numeric = Utils.trimLeftSpaces( t_numeric);
String strtemp = new String( t_numeric);
if(strtemp.equals("-.---") || strtemp.equals("-")){
recordObjects[i]=0.0;//这行代码,在你只需要输出里面的数据时,可以不用加,不会出错。当你要读用这里面的数据时就必须加。
continue;
} //这里是我自己加上的代码,就是屏蔽这个错误的。
if( t_numeric.length > 0 && !Utils.contains( t_numeric, (byte)'?')) {
recordObjects[i] = new Double( new String( t_numeric));
}
else {
recordObjects[i] = null;
}
}
错误二:
就是DBF文件里规范,0x20的标记表示不删除的,0x2A的标记表示删除的。但是里面的数据还是正常,并且有更新会更新的,只是我们在读取的时候有0x2A标记的我们是读取不出来的。所有在这里又要处理了,经过调试源码,修改一个地方就可以。
boolean isDeleted = false;
do {
if( isDeleted) {
dataInputStream.skip( this.header.recordLength-1);
}
int t_byte = dataInputStream.readByte();
if( t_byte == END_OF_DATA) {
return null;
}
//isDeleted = ( t_byte == '*'); //这句是原始的
// isDeleted=false;//这是修改后的,这样修改后,不论是什么标记就都可以正常读取了。
} while( isDeleted);
目前就发现这两种情况的错误,有时候这两个错误会在同时出现,所以有时候必须这两处都要修改。
这个东西写出来,供大家分享。
分享到:
相关推荐
在处理DBF文件时,可能会遇到编码问题、字段类型不匹配、文件损坏等情况。`javadbf`库应该提供了相应的异常处理机制,确保在出现问题时能捕获并处理错误。同时,了解不同版本的DBF文件的差异也非常重要,因为不同...
在处理DBF文件时,可能还会涉及到使用Kettle的特定插件或脚本来解析DBF文件的结构,然后进行数据清洗和转换。由于DBF文件是一种较为特殊的文件格式,因此在处理过程中可能需要采取特定的措施来确保数据的正确读取和...
在操作DBF文件时,可能遇到各种异常,如文件不存在、格式错误、权限问题等。JavaDBF库会抛出相应的异常,如`FileNotFoundException`、`DbfFormatException`等,需要在使用时进行捕获和处理。 7. 性能与效率 虽然...
测试用例`JavaDBFReaderTest.java`通常会演示如何使用`javadbf-0.4.0.jar`库来读取和解析DBF文件。以下是一个可能的测试用例结构: ```java import org.junit.Test; import static org.junit.Assert.*; public ...
JavaDBF源代码是用于处理DBF文件的Java库,这是一种常见的数据库文件格式,常见于老版本的DOS和Windows应用程序中,如FoxPro、dBase等。这个库提供了读取和写入DBF文件的功能,对于那些需要在Java项目中与这种格式...
JavaDBF工具类是用于处理DBF(dBase文件格式)的一种实用程序,它在Java环境中提供了读取和写入这种特定类型数据库...如果你在工作中遇到了需要处理DBF文件的任务,这个JavaDBF工具类会是一个值得参考和使用的资源。
其中,.shp文件存储几何信息,而.dbf文件则存储属性信息。本文将基于提供的代码片段,详细介绍如何使用Java语言来读取Shapefile文件中的几何信息以及DBF文件中的属性数据。 #### Java读取Shapefile文件的基础知识 ...
在Java开发中,处理地理空间数据时,常常会遇到.shp(Shapefile)文件,这是一种常见的矢量地理数据格式。为了将这些数据转换为适用于地图显示的经纬度格式,我们需要特定的库和工具。本话题将详细介绍如何在Java...
通常,DBF文件的头部和字段定义部分可以被解析成文本,但数据记录部分可能包含二进制数据,直接文本处理可能会遇到困难。 5. **注意事项**:读取DBF文件时要注意数据编码问题,因为老版本的DBF文件可能使用ASCII或...
本主题聚焦于如何在Java环境中读取和处理DBF文件,特别是处理DBF中的删除标记以及解决特定字符串解析问题。 首先,`DBFReader.java`是用于读取DBF文件的核心类。DBF文件结构中包含了一个删除标记,通常是一个单字节...
6. `(用JAVA解析DBF).txt` - 这可能是一个文本文件,详细解释了如何使用提供的Java代码来解析DBF文件,可能包括步骤、注意事项和技术细节。 综上所述,这篇博客内容可能涵盖以下知识点: 1. **DBF文件格式**:介绍...
在处理包含中文字符的DBF文件时,可能会遇到中文乱码的问题,这通常与编码设置不匹配有关。以下是一些关于解决DBF文件中文乱码的详细知识: 1. **编码问题**:DBF文件的字符编码可能是GBK、GB2312或BIG5等,而你的...
在Java环境下处理DBF文件,主要涉及到数据读取、写入和解析等操作,这对于需要与老式系统交互或处理历史数据的项目来说尤其重要。下面我们将深入探讨Java下读写DBF文件的相关知识点。 1. **DBF文件结构**:DBF文件...
如果在使用过程中遇到问题,开发者鼓励用户交流和指正,以便优化和改进代码。 在实际应用中,这种转换可能有以下几种用途: - **兼容性**:某些旧系统或特定软件可能只支持DBF格式,通过转换,可以确保数据能在这些...
Java解析XML文件主要涉及两种方式:DOM(Document Object Model)和SAX(Simple API for XML)。DOM和SAX都是用于处理XML数据的API,但在处理方式和效率上有显著区别。 DOM解析方式: DOM是一种将XML文件加载到内存...
Java 解析 XML 主要涉及两种主流方法:DOM(Document Object Model)和 SAX(Simple API for XML),以及另外两种更现代的技术:StAX(Streaming API for XML)和JAXB(Java Architecture for XML Binding)。...
本文将深入探讨如何使用SAX、DOM和Pull解析器解析XML文件,以及如何生成XML文件。我们将同时展示Java和Kotlin两种语言的实现方法。 一、SAX解析XML文件 SAX(Simple API for XML)是一种事件驱动的解析器,它不会一...
Excel to DBF Converter会解析Excel文件中的数据,然后将其转换为DBF文件格式。这个过程中,软件会保留原始数据结构,包括单元格的值、公式、格式等。 4. **数据兼容性**:转换后的DBF文件可以被多种数据库管理软件...
用户只需提供Excel文件路径,程序会自动解析数据并创建对应的DBF文件。为了确保数据转换的准确性,这个工具可能需要处理以下关键点: 1. **数据类型匹配**:Excel支持多种数据类型,如文本、数字、日期等,而DBF...
5. **编码问题**:DBF文件可能使用不同的字符编码,如ASCII、CP437或UTF-8。确保正确识别并转换编码以避免乱码。 6. **处理压缩和非压缩DBF**:有些DBF文件可能是压缩的,需要先解压才能读取。这通常涉及调用额外的...