Java 导出DBF格式文件(标题中文)
本文章不是原创,但是我抄袭的那个连接我找不到了,还是有些自己写的东西,见谅!
目录
前言
一、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格式文件(标题中文)相关推荐
- java 导出csv 格式,java导出csv格式文件的方法
这篇文章主要为大家详细介绍了java导出csv格式文件的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 导出csv格式文件的本质是导出以逗号为分隔的文本数据 imp ...
- java 如何导出json文件_java导出json格式文件的示例代码
本文介绍了java导出json格式文件的示例代码,分享给大家,具体如下: import java.io.File; import java.io.FileWriter; import java.io. ...
- java csv 单元格格式_java导出csv格式文件的方法
本文实例为大家分享了java导出csv格式文件的具体代码,供大家参考,具体内容如下 导出csv格式文件的本质是导出以逗号为分隔的文本数据 import java.io.BufferedWriter; ...
- bootstrap table export插件导出pdf格式文件中文乱码问题解决办法
bootstrap table export插件导出pdf格式文件中文乱码的问题折腾了我整整两天,网上到处都是改源码,自己设置字体的方案,我都没搞定.结果今天看到官方文档(地址:GitHub - hh ...
- java jsp导出pdf文件_JSP页面导出PDF格式文件
JSP页面导出PDF格式文件基本在前端页面可以全部完成 添加下载链接的点击事件 var downPdf = document.getElementById("downLoad"); ...
- 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"); ...
- java 导出本地xml文件_java导出xml文件
JDOM 文档声明其目的是"使用 20%(或更少)的精力解决 80%(或更多)Java/XML 问题"(根据学习曲线假定为 20%).JDOM 对于大多数 Java/XML 应用程 ...
- 【Java导出zip格式压缩包】
最近写了一个Java导出zip格式的工具类,亲测有效,前提是需要导出的文件已经存在数据库,或者存到了服务器上,得让工具类能找到得到.本次导出支持doc,docx,pdf,xls,xlsx,ppt,tx ...
- python3 库pandas写入csv格式文件出现中文乱码问题解决方法
python3 库pandas写入csv格式文件出现中文乱码问题解决方法 参考文章: (1)python3 库pandas写入csv格式文件出现中文乱码问题解决方法 (2)https://www.cn ...
最新文章
- kali2020安装中文输入法(切换中文输入法)
- PHP——通过下拉列表选择时间(转)
- leetcode--笔记——120. 三角形最小路径和
- python代码示例下载-Python实现多线程下载脚本的示例代码
- VTK:可视化之CubeAxesActor
- 阿里云 AI 编辑部获 CCBN 创新奖,揭秘传媒行业解决方案背后的黑科技
- android debug bridge tools_如何优雅的管理多环境下的Android代码
- 22岁印度大学生获谷歌天价offer,击败6000人年薪百万
- MobileNet V2简单总结
- QT5 串口收发实例代码
- 怎么给iOS项目打包
- Redis 学习之事务处理
- (2019.12.21已解决)pdf有密码如何打印
- 微信个人号有哪些好玩的自动回复?自动回复话术分享
- 判断一个整数能否同时被3和5整除
- Vulkan简介(1)
- HCIA云计算(1)
- Dubbo原理与实践(2)
- 英文中的一些常见缩写
- H5实现APP下载功能