JavaDBF操作DBF文件

JavaDBF 是让Java可以方便的操作DBF文件的一jar 包,在 http://sarovar.org/projects/javadbf/ 可以下载到。
下载根据文档可以很快上手的操作DBF文件。下面附两段代码:

读取DBF文件:这个是指南中的例子。
import  java.io. * ;
import  com.linuxense.javadbf. * ;

public   class  JavaDBFReaderTest  {

  
public static void main( String args[]) {

    
try {

      
// create a DBFReader object
      
//
      InputStream inputStream  = new FileInputStream( args[ 0]); // take dbf file as program argument
      DBFReader reader = new DBFReader( inputStream); 

      
// get the field count if you want for some reasons like the following
      
//
      int numberOfFields = reader.getFieldCount();

      
// use this count to fetch all field information
      
// if required
      
//
      forint i=0; i<numberOfFields; i++{

        DBFField field 
= reader.getField( i);

        
// do something with it if you want
        
// refer the JavaDoc API reference for more details
        
//
        System.out.println( field.getName());
      }


      
// Now, lets us start reading the rows
      
//
      Object []rowObjects;

      
while( (rowObjects = reader.nextRecord()) != null{

        
forint i=0; i<rowObjects.length; i++{

          System.out.println( rowObjects[i]);
        }

      }


      
// By now, we have itereated through all of the rows
      
      inputStream.close();
    }

    
catch( DBFException e) {

      System.out.println( e.getMessage());
    }

    
catch( IOException e) {

      System.out.println( e.getMessage());
    }

  }
  
}
  

这个例子读取中文会是乱码:
加入下面一行代码就可以了:
reader.setCharactersetName("gb2312");

写入DBF文件代码:也是指南中的例子
import  com.linuxense.javadbf. * ;
import  java.io. * ;

public   class  DBFWriterTest  {

  
public static void main( String args[])
  
throws DBFException, IOException {

    
// let us create field definitions first
    
// we will go for 3 fields
    
//
    DBFField fields[] = new DBFField[ 3];

    fields[
0= new DBFField();
    fields[
0].setName( "emp_code");
    fields[
0].setDataType( DBFField.FIELD_TYPE_C);
    fields[
0].setFieldLength( 10);

    fields[
1= new DBFField();
    fields[
1].setField( "emp_name");
    fields[
1].setDataType( DBFField.FIELD_TYPE_C);
    fields[
1].setFieldLength( 20);

    fields[
2= new DBFField();
    fields[
2].setField( "salary");
    fields[
2].setDataType( DBFField.FIELD_TYPE_N);
    fields[
2].setFieldLength( 12);
    fields[
2].setDecimalCount( 2);

    DBFWriter writer 
= new DBFWriter();
    writer.setFields( fields);

    
// now populate DBFWriter
    
//

    Object rowData[] 
= new Object[3];
    rowData[
0= "1000";
    rowData[
1= "John";
    rowData[
2= new Double( 5000.00);

    writer.addRecord( rowData);

    rowData 
= new Object[3];
    rowData[
0= "1001";
    rowData[
1= "Lalit";
    rowData[
2= new Double( 3400.00);

    writer.addRecord( rowData);

    rowData 
= new Object[3];
    rowData[
0= "1002";
    rowData[
1= "Rohit";
    rowData[
2= new Double( 7350.00);

    writer.addRecord( rowData);

    FileOutputStream fos 
= new FileOutputStream( args[0]);
    writer.write( fos);
    fos.close();
  }

}



同样想写入中文也要加入上面那一行代码。

接着问题就出现了:

在写入中文的时候当中文超过4个汉字的时候就能完全插入。
例如:想在某字段手插入“一二三四五”,当保存后结果却是“一二三四?"后面的字不见了!
由于这个问题,只好放弃用JavaDBF操作DBF文件了。改用SQL Server的存储过程了。虽然不能跨平台了,但在找到其他解决方法之前,就先用了。


如果那位有用过并知道答案的可以交流一下。wfn_libo@163.com




评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值