java读写dbf文件

原创 2011年01月14日 16:13:00

使用的是javadbf-0.4.0.jar,javadbf-0[1].4.1.jar
1、jar区别
 javadbf-0.4.0.jar为正式表,对中文支持不好,出现丢失中文数据问题。主要是没有考虑中文占2个字节问题。
 javadbf-0[1].4.1.jar是在 javadbf-0.4.0.jar基础上修改中文处理bug,能够出来部分中文问题,在字符串包含中文且总长度奇数并且等于dbf字段长度时,会丢失最后一个字节数据。
 修改javadbf-0[1].4.1.jar 中Utils.java类 textPadding 方法
  public static byte[] textPadding(String text, String characterSetName, int length, int alignment, byte paddingByte)
    throws UnsupportedEncodingException
  {
    byte[] srcByteArray = text.getBytes(characterSetName);
    byte[] dstByteArray = new byte[length];
    Arrays.fill(dstByteArray, paddingByte);

    int dstLength = 0;
    if (srcByteArray.length > length) // 原先为if (srcByteArray.length >= length)
      dstLength = (length % 2 == 0) ? length : length - 1;
    else {
      dstLength = srcByteArray.length;
    }

    switch (alignment)
    {
    case 10:
      System.arraycopy(srcByteArray, 0, dstByteArray, 0, dstLength);
      break;
    case 12:
      System.arraycopy(srcByteArray, 0, dstByteArray, length - dstLength,
        dstLength);
    case 11:
    }

    return dstByteArray;
  }

2、取数据
type[] temp = new byte[];
InputStream dbfIS  = new ByteArrayInputStream(temp);
    
    DBFReader dbfreader = new DBFReader(dbfIS);
    dbfreader.setCharactersetName("GBK");
    for (int b = 0; b < dbfreader.getFieldCount(); b++) {
     
     DBFField dbfd = dbfreader.getField(b);

     dbfd.getDataType();  // dbf数据类型
     dbfd.getDecimalCount(); // 小数位
     dbfd.getFieldLength(); // 字段总长度
     dbfd.getName(); // 字段名称
     
    }
1)、取值注意末尾空字符串,dbf数据为固定长度,取出字符串时会带空字符串。
2)、数据类型:
case DBFField.FIELD_TYPE_C: // 字符串
case DBFField.FIELD_TYPE_M: // 可以用字符串传值
case DBFField.FIELD_TYPE_D:  // 时期
case DBFField.FIELD_TYPE_F:  // 数值 用Double
case DBFField.FIELD_TYPE_N: // 数值 用Double
case DBFField.FIELD_TYPE_L: // Boolean
3)、Boolean 为Boolean.FALSE;对象

3、存数据

DBFWriter dbfwriter = null;
  int colCount = list.size();
  DBFField ajdbfield[] = new DBFField[colCount];
  //读取列信息,设置新的列信息
  for (int b = 0; b < colCount; b++) {
   DBFField tempDBFField = ((DbfZbMapping)list.get(b)).getDbfField();
   byte dataType = tempDBFField.getDataType();
   int decimalCount = tempDBFField.getDecimalCount();
   int fieldLength = tempDBFField.getFieldLength();
   String name = tempDBFField.getName().trim().toUpperCase();
   ajdbfield[b] = new DBFField();
   ajdbfield[b].setName(name);
   ajdbfield[b].setDataType(dataType);
   ajdbfield[b].setFieldLength(fieldLength);
   ajdbfield[b].setDecimalCount(decimalCount);
  }
  dbfwriter = new DBFWriter(outDbfFile);  // outDbfFile 为导出文件
  dbfwriter.setCharactersetName("GBK");
  dbfwriter.setFields(ajdbfield);
  return dbfwriter;

 Object colObjValueD[] = adjustFieldValue((List)fileMap.get(key1), feb, guids[i],wdp,item.getDbfUnitLog());
 if (colObjValueD == null)continue;
 dbfwriter.addRecord(colObjValueD);
 dbfwriter.write();// 一定要加

1)setName 名称不能重复
2)设置列长要比小数位长大
3)setDataType为
case DBFField.FIELD_TYPE_C: // 字符串
case DBFField.FIELD_TYPE_M: // 可以用字符串传值
case DBFField.FIELD_TYPE_D:  // 时期
case DBFField.FIELD_TYPE_F:  // 数值 用Double
case DBFField.FIELD_TYPE_N: // 数值 用Double
case DBFField.FIELD_TYPE_L: // Boolean

用JavaDBF操作(读、写)DBF文件

最近的一个项目需要动态生成DBF文件,用到JavaDBF,简单介绍一下官方网站:http://javadbf.sarovar.org/官方英文指南:http://sarovar.org/docman/...
  • xzknet
  • xzknet
  • 2014年01月09日 17:25
  • 10855

用JavaDBF操作(读、写)DBF文件

http://www.iteye.com/topic/106065 用JavaDBF操作(读、写)DBF文件 最近的一个项目需要动态生成DBF文件,用到JavaDBF,简单介绍一下 官方网站...
  • Mr__fang
  • Mr__fang
  • 2012年11月02日 10:16
  • 10332

java 读写 dbf

用javabdf.jar读写bdf 读取 public static void readDBF(String path) { InputStream fis = null; try { /...
  • sjzs5590
  • sjzs5590
  • 2012年06月14日 16:05
  • 5413

javadbf-0[1].4.1.jar

  • 2017年01月18日 10:27
  • 15KB
  • 下载

javadbf.jar

  • 2011年12月09日 17:01
  • 15KB
  • 下载

通过java操作dbf文件的javadbf

  • 2011年03月30日 10:27
  • 85KB
  • 下载

javadbf 实现解决中文乱码问题

DBFBase.java public abstract class DBFBase {  protected String characterSetName = "8859_1";  protect...
  • Hollboy
  • Hollboy
  • 2012年04月22日 09:59
  • 7843

【JAVA】读取和写入数据库生成的dbf文件

后缀名为.dbf的文件是来源于数据库,是数据库保存数据的一种方式。在java的开源库中,javadbf开源库,是专门用来读写dbf文件的工具。 【开发环境】 1、java开发工具,jdk-8u131-...
  • qazcxh
  • qazcxh
  • 2017年08月10日 09:35
  • 1025

javadbf 读取dbf文件 支持包括memo的多种类型

下面是读取dbf中各种数据类型,包括memo类型的部分源码 public Comparable[] nextRecord(Comparable[] recordObjects)  throws D...
  • boriswu
  • boriswu
  • 2013年05月23日 17:15
  • 955

java创建DBF文件官方jar修订版(修正中文乱码问题)

  • 2009年05月13日 11:28
  • 15KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java读写dbf文件
举报原因:
原因补充:

(最多只允许输入30个字)