本文章不是原创,但是我抄袭的那个连接我找不到了,还是有些自己写的东西,见谅!

目录

前言

一、DBF是什么?

二、使用步骤

1.引入库

2.正文

总结



前言

写这篇文章是有原因的,我前两天有一个需求,java导出DBF格式文件,我全网搜索只搜到使用1.9.4 版本的javadbf.jar包,导出的DBF格式文件标题中文乱码,害的我搞了两天!


提示:以下是本篇文章正文内容,下面案例可供参考

一、DBF是什么?

不想搜了,大概就是数据库用来传输数据的一种文件格式

二、使用步骤

1.引入库

代码如下(示例):

<!-- https://mvnrepository.com/artifact/com.github.albfernandez/javadbf -->
<dependency><groupId>com.github.albfernandez</groupId><artifactId>javadbf</artifactId><version>1.11.2</version>
</dependency>

2.正文

方法调用
public void downloadDBF(){
String[] column_title = {"年度","姓名","存活时间"};
String[] column_name = {"year","name","survivalTime"};// 这里是实体属性
String[][] columnNames = {column_title , column_name };
List beans = new ArrayList();// 把实体转化为List
String path="DBF.dbf";
DBFWriterUtils.writeDBF(beans,columnNames ,path);
}

我记得有个地方有默认排序来着,不然属性名和值就混乱了!


import com.linuxense.javadbf.DBFDataType;
import com.linuxense.javadbf.DBFException;
import com.linuxense.javadbf.DBFField;
import com.linuxense.javadbf.DBFWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;/*** @author :* @date :Created in 2021-7-8 14:33* @description:* @modified By:* @version:*/
public class DBFWriterUtils {public static void writeDbf(List beans, String[][] columnNames, String dbfName) {try {File file = new File(dbfName);if(!file.exists()){file.mkdirs();}FileOutputStream fos = new FileOutputStream(dbfName+File.separator+"GD.DBF");// 每行返回的属性有哪些List propertys = writeLine(beans.get(0), columnNames[1]);// 获取中文标题String[] columnList = columnNames[0];List propertyStrList = new ArrayList();for (String val : columnList) {propertyStrList.add(val);}Charset charset = Charset.forName("GBK");DBFWriter writer = new DBFWriter(fos, charset);//设置写入文件字段类型DBFField[] dbffs = writeFields(beans.get(0), propertys, propertyStrList);writer.setFields(dbffs);for (int i = 0; i < beans.size(); i++) {writer.addRecord(writeLine(beans.get(i), propertys));}writer.close();fos.close();} catch (Exception e) {e.printStackTrace();}}/*** 设置写入dbf文件字段类型** @return*/private static DBFField[] writeFields(Object obj, List propertys, List propertyStrList) throws UnsupportedEncodingException {java.lang.reflect.Field[] field = obj.getClass().getDeclaredFields();DBFField[] fields = new DBFField[propertys.size()];int i = 0;for (int j = 0; j < propertys.size(); j++) {String properStr = propertys.get(j).toString().toUpperCase();properStr = properStr.length() > 10 ? properStr.substring(properStr.length() - 10, properStr.length()) : properStr;for (java.lang.reflect.Field tempF : field) {String name = tempF.getName().toUpperCase();name = name.length() > 10 ? name.substring(name.length() - 10, name.length()) : name;if (name.equals(properStr)) {fields[i] = new DBFField();String str = propertyStrList.get(j).toString() == null ? new String(" ") : propertyStrList.get(j).toString();fields[i].setName(str);if (tempF.getType().equals(BigDecimal.class)) {fields[i].setType(DBFDataType.FLOATING_POINT);fields[i].setLength(22);fields[i].setDecimalCount(2);} else {fields[i].setType(DBFDataType.CHARACTER);fields[i].setLength(254);}i++;}}}return fields;}/*** 返回每行匹配配置xml的数?** @param bean* @param propertys* @return* @throws IllegalAccessException* @throws InvocationTargetException* @throws NoSuchMethodException*/private static Object[] writeLine(Object bean, List propertys) {List list = new ArrayList();printObj(bean, list, propertys);return list.toArray();}public static void printObj(Object obj, List list, List propertys) {Method[] meth = obj.getClass().getMethods();int i = 0;// 这里稍微繁琐了点儿,可以去掉截取字符串,因为这是旧版留下来的,现在不需要for (int j = 0; j < propertys.size(); j++) {String properStr = propertys.get(j).toString().toUpperCase();properStr = properStr.length() > 10 ? properStr.substring(properStr.length() - 10, properStr.length()) : properStr;for (Method tempM : meth) {//这里可以看出,你的实体属性不能有class开头if (tempM.getName().indexOf("get") > -1 && tempM.getName().indexOf("getClass") == -1) {String str = tempM.getName().toString().substring(3, tempM.getName().toString().length()).toUpperCase();str = str.length() > 10 ? str.substring(str.length() - 10, str.length()) : str;if (str.equals(properStr)) {try {Object objVaule = tempM.invoke(obj);if (tempM.getReturnType().equals(BigDecimal.class)) {BigDecimal bd = new BigDecimal(objVaule.toString());list.add(bd.doubleValue());} else {if (objVaule == null) {list.add(objVaule);} else {String value = objVaule.toString().length() > 254 ? objVaule.toString().substring(0, 254) : objVaule.toString();try {list.add(value.trim());} catch (Exception e) {e.printStackTrace();}}}i++;break;} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}}/*** 返回每行匹配配置xml的数�?** @return* @throws IllegalAccessException* @throws NoSuchMethodException*/public static List writeLine(Object obj, String[] columnNames) {List list = new ArrayList();for (String str : columnNames) {list.add(str);}return list;}
}

总结

其实也不简单,我搜两天,心态都崩了,都开始自己写类代替javadbf源码了,这让我勾起了学习回忆,appClassLoader了解一下?可以,写了这一篇还让我对双亲委派机制有了一点儿想法。

Java 导出DBF格式文件(标题中文)相关推荐

  1. java 导出csv 格式,java导出csv格式文件的方法

    这篇文章主要为大家详细介绍了java导出csv格式文件的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 导出csv格式文件的本质是导出以逗号为分隔的文本数据 imp ...

  2. java 如何导出json文件_java导出json格式文件的示例代码

    本文介绍了java导出json格式文件的示例代码,分享给大家,具体如下: import java.io.File; import java.io.FileWriter; import java.io. ...

  3. java csv 单元格格式_java导出csv格式文件的方法

    本文实例为大家分享了java导出csv格式文件的具体代码,供大家参考,具体内容如下 导出csv格式文件的本质是导出以逗号为分隔的文本数据 import java.io.BufferedWriter; ...

  4. bootstrap table export插件导出pdf格式文件中文乱码问题解决办法

    bootstrap table export插件导出pdf格式文件中文乱码的问题折腾了我整整两天,网上到处都是改源码,自己设置字体的方案,我都没搞定.结果今天看到官方文档(地址:GitHub - hh ...

  5. java jsp导出pdf文件_JSP页面导出PDF格式文件

    JSP页面导出PDF格式文件基本在前端页面可以全部完成 添加下载链接的点击事件 var downPdf = document.getElementById("downLoad"); ...

  6. java导出 elsx 文件,如何获取java导出的excel文件,发送请求导出excle文件

    如何获取java导出的excel文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 request.setCharacterEncoding("utf-8"); ...

  7. java 导出本地xml文件_java导出xml文件

    JDOM 文档声明其目的是"使用 20%(或更少)的精力解决 80%(或更多)Java/XML 问题"(根据学习曲线假定为 20%).JDOM 对于大多数 Java/XML 应用程 ...

  8. 【Java导出zip格式压缩包】

    最近写了一个Java导出zip格式的工具类,亲测有效,前提是需要导出的文件已经存在数据库,或者存到了服务器上,得让工具类能找到得到.本次导出支持doc,docx,pdf,xls,xlsx,ppt,tx ...

  9. python3 库pandas写入csv格式文件出现中文乱码问题解决方法

    python3 库pandas写入csv格式文件出现中文乱码问题解决方法 参考文章: (1)python3 库pandas写入csv格式文件出现中文乱码问题解决方法 (2)https://www.cn ...

最新文章

  1. kali2020安装中文输入法(切换中文输入法)
  2. PHP——通过下拉列表选择时间(转)
  3. leetcode--笔记——120. 三角形最小路径和
  4. python代码示例下载-Python实现多线程下载脚本的示例代码
  5. VTK:可视化之CubeAxesActor
  6. 阿里云 AI 编辑部获 CCBN 创新奖,揭秘传媒行业解决方案背后的黑科技
  7. android debug bridge tools_如何优雅的管理多环境下的Android代码
  8. 22岁印度大学生获谷歌天价offer,击败6000人年薪百万
  9. MobileNet V2简单总结
  10. QT5 串口收发实例代码
  11. 怎么给iOS项目打包
  12. Redis 学习之事务处理
  13. (2019.12.21已解决)pdf有密码如何打印
  14. 微信个人号有哪些好玩的自动回复?自动回复话术分享
  15. 判断一个整数能否同时被3和5整除
  16. Vulkan简介(1)
  17. HCIA云计算(1)
  18. Dubbo原理与实践(2)
  19. 英文中的一些常见缩写
  20. H5实现APP下载功能

热门文章

  1. 〖Python零基础入门篇⑳〗- 字符串格式化
  2. 好家伙!弟弟竟然背着我用电脑干这个,我用python轻松的识破他的谎言,阿姨对我赞不绝口!~
  3. kali2020.1版本关于命令行root的字体颜色修改
  4. UE4 动画插件Advanced Locomotion System V4分析
  5. 命令提示符 简单使用
  6. vue3 axios
  7. 大二春季学期简单规划
  8. 你好,法语!A2单词汇总
  9. 更新VantUI 组件
  10. think php 导出excel,使用thinkphp导出excel文件