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

所属分类: 软件编程 / java 阅读数: 118
收藏 0 赞 0 分享

以下是简单示例

复制代码 代码如下:

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();
  }
 }

}

更多精彩内容其他人还在看

Java实现一个简单的文件上传案例示例代码

这篇文章主要介绍了Java实现一个简单的文件上传案例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

详解在spring中使用JdbcTemplate操作数据库的几种方式

这篇文章主要介绍了详解在spring中使用JdbcTemplate操作数据库的几种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

java中的switch case语句使用详解

这篇文章主要介绍了java中的switch case语句使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

深入理解Java 线程池

这篇文章主要介绍了Java 线程池的相关资料,文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

详解mybatis #{}和${}的区别、传参、基本语法

这篇文章主要介绍了mybatis #{}和${}的区别、传参、基本语法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

MyBatis 中 ${}和 #{}的正确使用方法(千万不要乱用)

这篇文章主要介绍了MyBatis 中 ${}和 #{}的正确使用方法,本文给大家提到了MyBatis 中 ${}和 #{}的区别,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

详解Mybatis中的 ${} 和 #{}区别与用法

这篇文章主要介绍了Mybatis中的 ${} 和 #{}区别与用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Maven安装过程图文详解

这篇文章主要介绍了Maven安装过程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
收藏 0 赞 0 分享

SpringBoot登录拦截配置详解(实测可用)

这篇文章主要介绍了SpringBoot登录拦截配置详解(实测可用),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

JAVA 内存溢出案例汇总

这篇文章主要介绍了JAVA 内存溢出案例的汇总,文中讲解非常细致,帮助各位工作学习时避免内存溢出,感兴趣的朋友可以了解下
收藏 0 赞 0 分享
查看更多