关于DBF文件导出开发

List<SmsjModel> smsjModelList = smsjMapper.querySmsjPage(params);
SmsjModel[] smsjModels = new SmsjModel[smsjModelList.size()];
smsjModels = smsjModelList.toArray(smsjModels);
OutputStream fos = null;
FilePathModel filePathModel = filePathService.getDefaultPath();
String path = filePathModel.getFullPath()  + "smsj" + "\\" + "资金户余额"+ DateUtils.getDate("yyyyMMddHHmmss")+".dbf";
File file = new File(path);
if(!file.getParentFile().exists()){
    file.getParentFile().mkdirs();
}
try {
    DBFField[] fields = new DBFField[8];
    fields[0] = new DBFField();
    fields[0].setName("资金账号");
    fields[0].setDataType(DBFField.FIELD_TYPE_C);
    fields[0].setFieldLength(20);

    fields[1] = new DBFField();
    fields[1].setName("账户类型");
    fields[1].setDataType(DBFField.FIELD_TYPE_C);
    fields[1].setFieldLength(20);

    fields[2] = new DBFField();
    fields[2].setName("余额");
    fields[2].setDataType(DBFField.FIELD_TYPE_N);
    fields[2].setFieldLength(20);

    fields[3] = new DBFField();
    fields[3].setName("结息");
    fields[3].setDataType(DBFField.FIELD_TYPE_N);
    fields[3].setFieldLength(20);

    fields[4] = new DBFField();
    fields[4].setName("期权备付金");
    fields[4].setDataType(DBFField.FIELD_TYPE_N);
    fields[4].setFieldLength(20);

    fields[5] = new DBFField();
    fields[5].setName("期权保证金");
    fields[5].setDataType(DBFField.FIELD_TYPE_N);
    fields[5].setFieldLength(20);

    fields[6] = new DBFField();
    fields[6].setName("市场");
    fields[6].setDataType(DBFField.FIELD_TYPE_C);
    fields[6].setFieldLength(20);

    fields[7] = new DBFField();
    fields[7].setName("日期");
    fields[7].setDataType(DBFField.FIELD_TYPE_D);
    fields[7].setFieldLength(8);
    Charset charset = Charset.forName("GBK");
    DBFWriter writer = new DBFWriter(charset);
    writer.setFields(fields);
    for (SmsjModel t : smsjModels) {
        Object[] rowData = new Object[8];
        Class cls = t.getClass();
        Field[] fieldss = cls.getDeclaredFields();
        for(int i = 0;i < fieldss.length; i ++){
            Field f = fieldss[i];
            f.setAccessible(true);
            try {
                rowData[i] = f.get(t);
            } catch (IllegalArgumentException | IllegalAccessException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        writer.addRecord(rowData);

    }
    fos = new FileOutputStream(path);
    writer.write(fos);
    String filename = path.substring(path.lastIndexOf("\\")+1);
    response.setHeader("Content-Disposition", "attachment; filename="+ URLEncoder.encode(filename,"UTF-8"));
    InputStream in = null;
    OutputStream out = null;
    in = new FileInputStream(path);
    int len = 0;
    byte buffer[] = new byte[1024];
    out = response.getOutputStream();
    while((len = in.read(buffer)) != -1){
        out.write(buffer,0,len);
    }
    if(in != null){
        in.close();
    }
} catch (Exception e) {
    e.printStackTrace();
}

先奉上源代码

查询获取一个对象list  先写到服务器再通过response下载

需要引入的依赖

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

-----

Charset charset = Charset.forName("GBK");
DBFWriter writer = new DBFWriter(charset);

通过看底层源码  这个必须要有 否则导出的时候dbf文件表头行会乱码

fields[0].setDataType(DBFField.FIELD_TYPE_C);这块也很关键,要与对应字段的类型相匹配
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值