天天看点

Java实现DBF导入导出

原文地址:

https://blog.csdn.net/xzknet/article/details/18045761

首先加入maven依赖

<dependency>
    <groupId>com.github.albfernandez</groupId>
    <artifactId>javadbf</artifactId>
    <version>1.9.4</version>
</dependency>
           

1.读DBF

package dbf;  
  
import java.io.FileInputStream;  
import java.io.InputStream;  
  
import com.linuxense.javadbf.DBFField;  
import com.linuxense.javadbf.DBFReader;  
  
public class readDBF {  
    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();  
            // 取出字段信息  
            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 main(String[] args) {  
        readDBF.readDBF("c:/到货明细表.DBF");  
    }  
}  
           

2.写DBF

public void getDbf(HttpServletResponse response) {
        String fileName = "表名.dbf";
        response.setContentType("application/x-dbf");
        response.setCharacterEncoding("utf-8");
        response.setHeader("Content-Disposition", "attachment;filename=" + CodecUtil.encode(fileName));
        try {
            // 定义DBF文件字段
            DBFField[] fields = new DBFField[3];
            // 分别定义各个字段信息,setFieldName和setName作用相同,
            // 只是setFieldName已经不建议使用
            fields[0] = new DBFField();
            // fields[0].setFieldName("emp_code");
            fields[0].setName("ch_name");
            fields[0].setDataType(DBFField.FIELD_TYPE_C);
            fields[0].setFieldLength(10);
            fields[1] = new DBFField();
            // fields[1].setFieldName("emp_name");
            fields[1].setName("en_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实例用来写DBF文件
            DBFWriter writer = new DBFWriter(response.getOutputStream());
            // 把字段信息写入DBFWriter实例,即定义表结构
            writer.setFields(fields);
            // 一条条的写入记录
            for(int i = 0;i < 100;i ++){
                Object[] rowData = new Object[3];
                rowData[0] = "小万";
                rowData[1] = "XiaoWan";
                rowData[2] = new Double(5000.00);
                writer.addRecord(rowData);
            }
            // 写入数据
            writer.write();

            if(writer != null){
                writer.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
           

用excel即可打开dbf文件