`
stgaohu
  • 浏览: 13256 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

java处理DBF文件示例

 
阅读更多

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

}

 

 

 

 

分享到:
评论

相关推荐

    DBF文件操作示例, 里面已经追加了相关的测试数据哦:), 不容错过!!!

    很好的DBF文件操作示例, 里面已经追加了相关的测试数据哦:), 不容错过!!!

    LINUX平台JAVA直接连接access数据库dbf文件

    JAVA直接连接access数据库dbf文件,同时兼容LINUX、UNIX、WINDOWS操作系统。示例工程代码,导入eclipse即可运行。

    javadbf-0.4.0,中文乱码解决及测试中文输出代码

    通过修改默认字符集及写入dbf时所用的方法,使原有的javadbf增加了中文内容及中文字段名的支持;奉上写入dbf文件中文内容及中文标题的代码示例

    DBF操作实例

    利用Javadbf.jar包操作dbf文件的实例

    javadbf 标题内容中文乱码解决

    基于javadbf-0.4.0修改而来,a.修改了基类中的默认字符编码;b.修改了写入类中的字节填充位置计算方法,使之支持双字节; 补充:通常dbf使用excel打开时,gb2312的中文能正常显示,utf8的不行,所以默认字符集设置成...

    Java用GDAL读写shapefile的方法示例

    Shapefile文件是描述空间数据的几何和属性特征的非拓扑实体矢量数据结构的一种格式,由ESRI公司开发。这篇文章给大家介绍了Java如何用GDAL读写shapefile的方法示例,有需要的朋友们可以参考借鉴,下面来一起看看吧。

    网管教程 从入门到精通软件篇.txt

    DBF:dBASE文件,一种由Ashton-Tate创建的格式,可以被ACT!、Lipper、FoxPro、Arago、Wordtech、Xbase和类似数据库或与数据库有关产品识别;可用数据文件(能被Excel 97打开);Oracle 8.1.x表格空间文件 DBX:...

    c++实现关系型数据库-数据库概论课程设计.zip

    基于 C++11从底层实现了DBMS的部分功能,底层存储结构位0x3f版本的dbf文件。 编译 IDE:Visual Studio 2015及以上 OS:win10 Complier:MSVC++11.0 或更高,必需在64位环境下进行编译 查询语句 Create 多字段,多数据...

    Oracle 10g 开发与管理

    1.数据文件(.DBF) 14 2.日志文件 (.Log) 14 1) 日志文件 15 2) 数据库工作模式 15 3.控制文件(.ctl) 15 4.参数文件 (.ora) 16 二. 逻辑存储结构 17 1.数据块 (Data Blocks) 17 2.盘区(Extent) 18 3.段 ...

    oracle数据库笔记

    1.数据文件(.DBF) 14 2.日志文件 (.Log) 14 1) 日志文件 15 2) 数据库工作模式 15 3.控制文件(.ctl) 15 4.参数文件 (.ora) 16 二. 逻辑存储结构 17 1.数据块 (Data Blocks) 17 2.盘区(Extent) 18 3.段 ...

Global site tag (gtag.js) - Google Analytics