java解析dbf之通过javadbf包生成和读取dbf文件

 更新时间:2014年01月28日 12:05:17   转载 作者:  
这篇文章主要介绍了java通过javadbf读取和生成DBF文件的方法,大家参考使用吧

以下是简单示例

复制代码 代码如下:

package com.cramc;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

import com.linuxense.javadbf.DBFException;
import com.linuxense.javadbf.DBFField;
import com.linuxense.javadbf.DBFReader;
import com.linuxense.javadbf.DBFWriter;

public class Rwdbf {

 public static void readDBF(String path)  

    {  

       InputStream fis = null;
        try
        { 
            //读取文件的输入流
            fis  = new FileInputStream(path);
            //根据输入流初始化一个DBFReader实例,用来读取DBF文件信息
            DBFReader reader = new DBFReader(fis); 
            //调用DBFReader对实例方法得到path文件中字段的个数
            int fieldsCount = reader.getFieldCount();
            System.out.println("字段数:"+fieldsCount);
            //取出字段信息  
            for( int i=0; i<fieldsCount; i++)   
            {  
              DBFField field = reader.getField(i);
              System.out.println(field.getName());
            }  
            Object[] rowValues;  
            //一条条取出path文件中记录  
            while((rowValues = reader.nextRecord()) != null)
            {  
              for( int i=0; i<rowValues.length; i++)
              {  
                System.out.println(rowValues[i]);
              }  
            }  
          }  
          catch(Exception e)   
          {  
          e.printStackTrace(); 
          } 
          finally 
          {  
          try{  
               fis.close();
          }catch(Exception e){} 
          }
    }  

 

 public static void writeDBF(String path)
 {

  OutputStream fos = null;
  try 
  {  
      //定义DBF文件字段  
      DBFField[] fields = new DBFField[3];
      //分别定义各个字段信息,setFieldName和setName作用相同,
      //只是setFieldName已经不建议使用  
      fields[0] = new DBFField();  
      //fields[0].setFieldName("emp_code");
      fields[0].setName("semp_code");  
      fields[0].setDataType(DBFField.FIELD_TYPE_C);  
      fields[0].setFieldLength(10);  

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

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

      //DBFWriter writer = new DBFWriter(new File(path));  

      //定义DBFWriter实例用来写DBF文件  
      DBFWriter writer = new DBFWriter();
      //把字段信息写入DBFWriter实例,即定义表结构 
      writer.setFields(fields);  
      //一条条的写入记录  
      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);  

      //定义输出流,并关联的一个文件  
      fos = new FileOutputStream(path);
      //写入数据  
      writer.write(fos);  

      //writer.write(); 
  }catch(Exception e)  
  {  
      e.printStackTrace();  
  }  
  finally 
  {  
      try{  
      fos.close();
      }catch(Exception e){}
  }
 }

 public static void main(String[] args){
  String path ="E:\\tmp\\2\\xx.dbf";
  try {
   InputStream fis = new FileInputStream(path);
   DBFReader reader = new DBFReader(fis);
   int fieldsCount = reader.getFieldCount();
            System.out.println("字段数:"+fieldsCount);

            DBFField[] df = new DBFField[fieldsCount+2];
            for( int i=0; i<fieldsCount; i++)   
            {  
              df[i] = reader.getField(i);
              System.out.println("field"+i+":"+df[i].getName());
            }
            df[fieldsCount] = new DBFField();
            df[fieldsCount].setName("add1");
            df[fieldsCount].setDataType(DBFField.FIELD_TYPE_C);
            df[fieldsCount].setFieldLength(10);
            df[fieldsCount+1] = new DBFField();
            df[fieldsCount+1].setName("add2");
            df[fieldsCount+1].setDataType(DBFField.FIELD_TYPE_C);
            df[fieldsCount+1].setFieldLength(10);

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

            Object[] rowValues;
            Object[] rowValues1 = new Object[fieldsCount+2];
            //一条条取出path文件中记录  
            while((rowValues = reader.nextRecord()) != null)
            {
              for(int i=0;i<fieldsCount;i++){
               rowValues1[i] = rowValues[i];
              }
              rowValues1[fieldsCount]="x";
              rowValues1[fieldsCount+1]="xx";
              writer.addRecord(rowValues1);
            }

           
            path ="E:\\tmp\\2\\test2.dbf";
            OutputStream fos = new FileOutputStream(path);
          //写入数据  
          writer.write(fos);  

          System.out.println("OVER");

           
  } catch (FileNotFoundException | DBFException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }

}

相关文章

  • 走进SpringBoot之配置文件与多环境详解

    走进SpringBoot之配置文件与多环境详解

    这篇文章主要介绍了走进SpringBoot之配置文件与多环境,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • Spring Boot集成Swagger2项目实战

    Spring Boot集成Swagger2项目实战

    在日常的工作中,我们往往需要给前端(WEB端、IOS、Android)或者第三方提供接口,这个时候我们就需要给他们提供一份详细的API说明文档。这篇文章我们就来分享一种API文档维护的方式,即通过Swagger来自动生成Restuful API文档
    2018-01-01
  • Java通过exchange协议发送邮件

    Java通过exchange协议发送邮件

    这篇文章主要为大家详细介绍了Java通过exchange协议发送邮件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • Java 反射机制知识详细介绍及总结

    Java 反射机制知识详细介绍及总结

    反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制
    2017-01-01
  • 详解MyBatis Generator自动创建代码(dao,mapping,poji)

    详解MyBatis Generator自动创建代码(dao,mapping,poji)

    这篇文章主要介绍了详解MyBatis Generator自动创建代码(dao,mapping,poji)的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-10-10
  • Spring学习之依赖注入的方法(三种)

    Spring学习之依赖注入的方法(三种)

    本篇文章主要介绍了Spring学习之依赖注入的方法(三种),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • 详解java中面向对象设计模式类与类的关系

    详解java中面向对象设计模式类与类的关系

    这篇文章主要介绍了java面向对象设计模式中类与类之间的关系,下面小编和大家一起来学习一下吧
    2019-05-05
  • SpringMVC框架实现图片上传与下载

    SpringMVC框架实现图片上传与下载

    这篇文章主要为大家详细介绍了SpringMVC框架实现图片上传与下载,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • Java 跳出递归循环问题解决办法

    Java 跳出递归循环问题解决办法

    这篇文章主要介绍了 Java 跳出递归循环问题解决办法的相关资料,需要的朋友可以参考下
    2017-07-07
  • Java java.lang.ExceptionInInitializerError 错误如何解决

    Java java.lang.ExceptionInInitializerError 错误如何解决

    这篇文章主要介绍了 Java java.lang.ExceptionInInitializerError 错误如何解决的相关资料,需要的朋友可以参考下
    2017-06-06

最新评论