具体代码怎么样?还有那javaDBF.jar 如何使用?

解决方案 »

  1.   

    http://download.csdn.net/detail/starting0/2926718
      

  2.   

    java解析dbf文件三种方法、以及解析驱动
    http://download.csdn.net/detail/jiang88kang/2678996
      

  3.   

    应该是一种标准吧,我也不是很清楚,还在研究中呢。
    贴点信息:
    .dbf文件的二进制文件格式表文件由头记录及数据记录组成。头记录定义该表的结构并包含与表相关的其他信息。头记录由文件位置 0 开始。数据记录1紧接在头记录之后(连续的字节),包含字段中实际的文本。 
    记录的长度(以字节为单位)等于所有字段定义的长度之和。表文件中存储整数时低位字节在前。 
    1.表头记录的结构: 
    字节偏移 说明 
    0 文件类型 
    0x02 FoxBASE 
    0x03 FoxBASE+/dBASE III PLUS,无备注 
    0x30 Visual FoxPro 
    0x43 dBASE IV SQL 表文件,无备注 
    0x63 dBASE IV SQL 系统文件,无备注 
    0x83 FoxBASE+/dBASE III PLUS,有备注 
    0x8B dBASE IV 有备注 
    0xCB dBASE IV SQL 表文件,有备注 
    0xF5 FoxPro 2.x(或更早版本)有备注 
    0xFB FoxBASE 
    1 - 3 最近一次更新的时间(YYMMDD)
    4 - 7 文件中的记录数目
    8 - 9 第一个数据记录的位置
    10 - 11 每个数据记录的长度(包括删除标记)
    12 - 27 保留
    28 表的标记
    0x01 具有 .cdx 结构的文件 
    0x02 文件包含备注。 
    0x04 文件是数据库(.dbc) 
    请注意,这个字节可以包含任何上面值的和。例如,0x03 表明表具有结构化.cdx和一个备注字段。
    29 代码页标记
    30 - 31 保留,包含 0x00
    32 - n 字段子记录 
    字段的数目决定了字段子记录的数目。
    表中每个字段都对应一个字段子记录。 
    n+1 头记录终止符(0x0D),
    n+2 到 n+264 此范围内的 263 个字节包含后链信息(相关数据库 (.dbc) 的相对路径)。如果第一个字节为 0x00,则该文件不与数据库关联。因此数据库文件本身总是包含 0x00。
    头记录中的第 8 到第 9 个字节指示数据文件中数据的起始位置。
    数据记录从 除标记字节开始。
    如果此字节为 ASCII 空格 (0x20),该记录没有删除标记, 如果第一字节为星号 (0x2A),该记录有删除标记。
    在标记之后是字段记录中所命名各字段中的数据
    2.字段子记录结构
    字节偏移 说明 
    0 - 10 字段名(最多 10 个字符 -若少于 10 则用空字符 (0x00) 填充) 
    11 字段类型 
    C-字符型 
    Y-货币型 
    N-数值型 
    F-浮点型 
    D-日期型 
    T-日期时间型 
    B-双精度型 
    I-整型 
    L-逻辑型 
    M-备注型 
    G-通用型 
    C-字符型(二进制) 
    M-备注型(二进制) 
    P-图片型 
    12 - 15 记录中该字段的偏移量 
    16 字段长度(以字节为单位) 
    17 小数位数 
    18 字段标记 
    0x01系统列(用户不可见) 
    0x02可存储 null 值的列 
    0x04二进制列(只适于字符型和备注型) 
    19 - 32 保留 
    格式保存的文件标头: 
    支持 null 值 
    日期时间型、货币型及双精度型数据 
    字符字段和备注字段标记为二进制 
    在数据库 (.dbc) 文件中添加表 
    提示 可以使用下面的公式求出表文件中字段的数目:(x - 296/32) 公式中,x 表示第一个记录的位置(表头记录的第 8 到第 9 个字节),296 表示 263(后链信息)+ 1(头记录终止符)+ 32(第一个字段子记录),32 是字段子记录的长度。
    因为dbf文件的记录在文件数据部分,都是用ASCII码形式存放的,所以只要读出文件头和字段类型描述区的内容,就可以直接读取dbf文件中的每条记录。参考:
    .dbf文件的二进制文件格式  表文件由头记录及数据记录组成。头记录定义该表的结构并包含与表相关的其他信息。头记录由文件位置 0 开始。数据记录1紧接在头记录之后(连续的字节),包含字段中实际的文本。  记录的长度(以字节为单位)等于所有字段定义的长度之和。表文件中存储整数时低位字节在前。  1.表头记录的结构:  字节偏移 说明  0 文件类型  0x02 FoxBASE  0x03 FoxBASE+/dBASE III PLUS,无备注  0x30 Visual FoxPro  0x43 dBASE IV SQL 表文件,无备注  0x63 dBASE IV SQL 系统文件,无备注  0x83 FoxBASE+/dBASE III PLUS,有备注  0x8B dBASE IV 有备注  0xCB dBASE IV SQL 表文件,有备注  0xF5 FoxPro 2.x(或更早版本)有备注  0xFB FoxBASE  1 - 3 最近一次更新的时间(YYMMDD) 4 - 7 文件中的记录数目 8 - 9 第一个数据记录的位置 10 - 11 每个数据记录的长度(包括删除标记) 12 - 27 保留 28 表的标记 0x01 具有 .cdx 结构的文件  0x02 文件包含备注。  0x04 文件是数据库(.dbc)  请注意,这个字节可以包含任何上面值的和。例如,0x03 表明表具有结构化.cdx和一个备注字段。 29 代码页标记 30 - 31 保留,包含 0x00 32 - n 字段子记录  字段的数目决定了字段子记录的数目。 表中每个字段都对应一个字段子记录。  n+1 头记录终止符(0x0D), n+2 到 n+264 此范围内的 263 个字节包含后链信息(相关数据库 (.dbc) 的相对路径)。如果第一个字节为 0x00,则该文件不与数据库关联。因此数据库文件本身总是包含 0x00。 头记录中的第 8 到第 9 个字节指示数据文件中数据的起始位置。 数据记录从 除标记字节开始。 如果此字节为 ASCII 空格 (0x20),该记录没有删除标记, 如果第一字节为星号 (0x2A),该记录有删除标记。 在标记之后是字段记录中所命名各字段中的数据 2.字段子记录结构 字节偏移 说明  0 - 10 字段名(最多 10 个字符 -若少于 10 则用空字符 (0x00) 填充)  11 字段类型  C-字符型  Y-货币型  N-数值型  F-浮点型  D-日期型  T-日期时间型  B-双精度型  I-整型  L-逻辑型  M-备注型  G-通用型  C-字符型(二进制)  M-备注型(二进制)  P-图片型  12 - 15 记录中该字段的偏移量  16 字段长度(以字节为单位)  17 小数位数  18 字段标记  0x01系统列(用户不可见)  0x02可存储 null 值的列  0x04二进制列(只适于字符型和备注型)  19 - 32 保留  格式保存的文件标头:  支持 null 值  日期时间型、货币型及双精度型数据  字符字段和备注字段标记为二进制  在数据库 (.dbc) 文件中添加表  提示 可以使用下面的公式求出表文件中字段的数目:(x - 296/32) 公式中,x 表示第一个记录的位置(表头记录的第 8 到第 9 个字节),296 表示 263(后链信息)+ 1(头记录终止符)+ 32(第一个字段子记录),32 是字段子记录的长度。 因为dbf文件的记录在文件数据部分,都是用ASCII码形式存放的,所以只要读出文件头和字段类型描述区的内容,就可以直接读取dbf文件中的每条记录。  参考: [url=.dbf文件的二进制文件格式  表文件由头记录及数据记录组成。头记录定义该表的结构并包含与表相关的其他信息。头记录由文件位置 0 开始。数据记录1紧接在头记录之后(连续的字节),包含字段中实际的文本。  记录的长度(以字节为单位)等于所有字段定义的长度之和。表文件中存储整数时低位字节在前。  1.表头记录的结构:  字节偏移 说明  0 文件类型  0x02 FoxBASE  0x03 FoxBASE+/dBASE III PLUS,无备注  0x30 Visual FoxPro  0x43 dBASE IV SQL 表文件,无备注  0x63 dBASE IV SQL 系统文件,无备注  0x83 FoxBASE+/dBASE III PLUS,有备注  0x8B dBASE IV 有备注  0xCB dBASE IV SQL 表文件,有备注  0xF5 FoxPro 2.x(或更早版本)有备注  0xFB FoxBASE  1 - 3 最近一次更新的时间(YYMMDD) 4 - 7 文件中的记录数目 8 - 9 第一个数据记录的位置 10 - 11 每个数据记录的长度(包括删除标记) 12 - 27 保留 28 表的标记 0x01 具有 .cdx 结构的文件  0x02 文件包含备注。  0x04 文件是数据库(.dbc)  请注意,这个字节可以包含任何上面值的和。例如,0x03 表明表具有结构化.cdx和一个备注字段。 29 代码页标记 30 - 31 保留,包含 0x00 32 - n 字段子记录  字段的数目决定了字段子记录的数目。 表中每个字段都对应一个字段子记录。  n+1 头记录终止符(0x0D), n+2 到 n+264 此范围内的 263 个字节包含后链信息(相关数据库 (.dbc) 的相对路径)。如果第一个字节为 0x00,则该文件不与数据库关联。因此数据库文件本身总是包含 0x00。 头记录中的第 8 到第 9 个字节指示数据文件中数据的起始位置。 数据记录从 除标记字节开始。 如果此字节为 ASCII 空格 (0x20),该记录没有删除标记, 如果第一字节为星号 (0x2A),该记录有删除标记。 在标记之后是字段记录中所命名各字段中的数据 2.字段子记录结构 字节偏移 说明  0 - 10 字段名(最多 10 个字符 -若少于 10 则用空字符 (0x00) 填充)  11 字段类型  C-字符型  Y-货币型  N-数值型  F-浮点型  D-日期型  T-日期时间型  B-双精度型  I-整型  L-逻辑型  M-备注型  G-通用型  C-字符型(二进制)  M-备注型(二进制)  P-图片型  12 - 15 记录中该字段的偏移量  16 字段长度(以字节为单位)  17 小数位数  18 字段标记  0x01系统列(用户不可见)  0x02可存储 null 值的列  0x04二进制列(只适于字符型和备注型)  19 - 32 保留  格式保存的文件标头:  支持 null 值  日期时间型、货币型及双精度型数据  字符字段和备注字段标记为二进制  在数据库 (.dbc) 文件中添加表  提示 可以使用下面的公式求出表文件中字段的数目:(x - 296/32) 公式中,x 表示第一个记录的位置(表头记录的第 8 到第 9 个字节),296 表示 263(后链信息)+ 1(头记录终止符)+ 32(第一个字段子记录),32 是字段子记录的长度。 因为dbf文件的记录在文件数据部分,都是用ASCII码形式存放的,所以只要读出文件头和字段类型描述区的内容,就可以直接读取dbf文件中的每条记录。  
    参考: http://msdn.microsoft.com/en-us/library/st4a0s68%28v=VS.71%29.aspx

      

  4.   

    好乱啊,见谅!!
    http://msdn.microsoft.com/en-us/library/st4a0s68%28v=VS.71%29.aspx
      

  5.   

    确实看着挺头疼的,就跟excel二进制一样,每一位都代表一种含义。
      

  6.   

    http://viwo.iteye.com/blog/106065
    那个JAR是让你添加到项目中的
      

  7.   

    package search;
    import java.io.PrintStream;
    import java.io.PrintWriter;public class JDBFException extends Exception {
    private static final long serialVersionUID = 1079752281227294498L; public JDBFException(String s) {
    this(s, null);
    } public JDBFException(Throwable throwable) {
    this(throwable.getMessage(), throwable);
    } public JDBFException(String s, Throwable throwable) {
    super(s);
    detail = throwable;
    } public String getMessage() {
    if (detail == null)
    return super.getMessage();
    else
    return super.getMessage();
    } public void printStackTrace(PrintStream printstream) {
    if (detail == null) {
    super.printStackTrace(printstream);
    return;
    } else {
    PrintStream printstream1 = printstream;
    printstream1.println(this);
    detail.printStackTrace(printstream); return;
    }
    } public void printStackTrace() {
    printStackTrace(System.err);
    } public void printStackTrace(PrintWriter printwriter) {
    if (detail == null) {
    super.printStackTrace(printwriter);
    return;
    } else {
    PrintWriter printwriter1 = printwriter;
    printwriter1.println(this);
    detail.printStackTrace(printwriter);
    return;
    }
    } private Throwable detail;}
    读取的结果不对,请高手指点哪里出错了
      

  8.   

    package search;
    public class ReadDBF {
    public static void main(String args[])
       
        {
    readDBF();
        }
    private static void readDBF()
    {
         try
         {
          System.out.println("正在读取文件!");
       
          DBFReader dbfreader = new DBFReader("D:\\ZG2011格式.dbf");
          for(int b = 0;b<dbfreader.getFieldCount();b++)
          {
           if(b>0)
           { System.out.print(",");}
           System.out.print(dbfreader.getField(b).getName().trim().toUpperCase());
          
           if(b == (dbfreader.getFieldCount()-1))
            System.out.print("\n");
          } 
          for(int i = 0;dbfreader.hasNextRecord();i++)
          {
           String[] aobj = dbfreader.nextRecordString();
           for(int b = 0;b<dbfreader.getFieldCount();b++)
           {
            if(b>0)
             System.out.print(",");
            System.out.print(aobj[b].trim());
         
            if(b == (dbfreader.getFieldCount()-1))
             System.out.print("\n");
         
           } 
          }
          System.out.println("读取文件成功!");
         }
         catch(Exception e)
         {
          System.out.print(e.getMessage());
         }
    }

    }
    是这个