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

}

相关文章

  • JavaWeb开发入门第一篇必备知识讲解

    JavaWeb开发入门第一篇必备知识讲解

    JavaWeb开发入门第一篇主要内容介绍的是必备知识、基础知识、搭建JavaWeb应用开发环境,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • java基于JDBC连接Oracle 11g Release2实例分析

    java基于JDBC连接Oracle 11g Release2实例分析

    这篇文章主要介绍了java基于JDBC连接Oracle 11g Release2的方法,实例分析了JDBC连接Oracle 11g Release2容易出现的异常与解决方法,需要的朋友可以参考下
    2015-06-06
  • 解决java.util.zip.ZipException: Not in GZIP format报错问题

    解决java.util.zip.ZipException: Not in GZIP&nbs

    这篇文章主要介绍了解决java.util.zip.ZipException: Not in GZIP format报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Java 程序员必备的 Intellij IDEA 插件

    Java 程序员必备的 Intellij IDEA 插件

    java插件十分方便实用,以下是我用过不错的Intellij插件,当然还有很多插件也都不错,下面将我觉得不错的插件分享给大家,希望能帮到大家
    2018-09-09
  • SpringAOP如何修改请求参数列表

    SpringAOP如何修改请求参数列表

    这篇文章主要介绍了SpringAOP如何修改请求参数列表问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Java 中 Class Path 和 Package的使用详解

    Java 中 Class Path 和 Package的使用详解

    这篇文章主要介绍了Java 中 Class Path和Package的使用详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-08-08
  • Elasticsearch 基础介绍及索引原理分析

    Elasticsearch 基础介绍及索引原理分析

    这篇文章主要介绍了Elasticsearch 基础介绍及索引原理分析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • zookeeper服务优化的一些建议

    zookeeper服务优化的一些建议

    今天小编就为大家分享一篇关于zookeeper服务优化的一些建议,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Spring 定时任务@Scheduled 注解中的 Cron 表达式详解

    Spring 定时任务@Scheduled 注解中的 Cron 表达式详解

    Cron 表达式是一种用于定义定时任务触发时间的字符串表示形式,它由七个字段组成,分别表示秒、分钟、小时、日期、月份、星期和年份,这篇文章主要介绍了Spring 定时任务@Scheduled 注解中的 Cron 表达式,需要的朋友可以参考下
    2023-07-07
  • SpringBoot整合mybatis结合pageHelper插件实现分页

    SpringBoot整合mybatis结合pageHelper插件实现分页

    在本篇文章里小编给大家整理的是关于SpringBoot整合mybatis使用pageHelper插件进行分页操作相关知识点,需要的朋友们学习下。
    2020-02-02

最新评论