《Java知识应用》Java读写DBF文件
1. 准备:
Jar包下载:链接: https://pan.baidu.com/s/1Ikxx-vkw5vSDf9SBUQHBCw 提取码: 7h58 复制这段内容后打开百度网盘手机App,操作更方便哦
2. 案例:
import com.linuxense.javadbf.DBFDataType;
import com.linuxense.javadbf.DBFField;
import com.linuxense.javadbf.DBFReader;
import com.linuxense.javadbf.DBFWriter; import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; /**
* 读写DBF文件工具类
*/
public class DBFUtils { /**
* 读DBF文件
* @param path
* @param charsetName
* @return
* @throws IOException
*/
public static List<Map<String, String>> readDbf(String path, String charsetName) {
List<Map<String, String>> rowList = new ArrayList<>();
DBFReader dbfReader = null;
Object[] rowValues;
try {
dbfReader = new DBFReader(new FileInputStream(path), Charset.forName(charsetName)); while ((rowValues = dbfReader.nextRecord()) != null) {
Map<String, String> rowMap = new HashMap<>();
for (int i = 0; i < rowValues.length; i++) {
rowMap.put(dbfReader.getField(i).getName(), String.valueOf(rowValues[i]).trim());
}
rowList.add(rowMap);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (dbfReader != null){
dbfReader.close();
}
}
return rowList;
} /**
* 创建dbf
* @param path:文件路径
* @param fieldList:字段
* @param charsetName 编码字符集
* @throws IOException
*/
public static void createDbf(String path, List<Map<String, String>> fieldList, String charsetName){
DBFField[] fields = new DBFField[fieldList.size()];
int index = 0;
for (Map<String, String> fieldMap : fieldList) {
DBFField field = new DBFField();
field.setName(fieldMap.get("name"));//字段名称
field.setType(DBFDataType.CHARACTER);//指定字段类型为字符串
field.setLength(Integer.valueOf(fieldMap.get("length")));//指定长度
fields[index] = field;
index++;
}
//定义DBFWriter实例用来写DBF文件
DBFWriter dbfWriter = null;
try {
dbfWriter = new DBFWriter(new FileOutputStream(path), Charset.forName(charsetName));
//设置字段
dbfWriter.setFields(fields);
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
//写入dbf文件并关闭
if(dbfWriter != null){
dbfWriter.close();
}
} } /**
* 获取字段名
* @param path
* @param charsetName
* @return
* @throws IOException
*/
public static String[] getFieldName(String path, String charsetName){
DBFReader dbfReader = null;
String[] fieldName = null;
try {
dbfReader = new DBFReader(new FileInputStream(path), Charset.forName(charsetName));
int fieldCount = dbfReader.getFieldCount();//获取字段数量
fieldName = new String[fieldCount];
for (int i = 0; i < fieldCount; i++) {
fieldName[i] = dbfReader.getField(i).getName();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (dbfReader != null){
dbfReader.close();
}
}
return fieldName;
} /**
* 写dbf文件
* @param path:dbf文件路径
* @param rowList:要写入的记录行
* @param charsetName:字符集
* @throws IOException
*/
public static void writeDbf(String path, List<Map<String, String>> rowList, String charsetName) {
DBFWriter dbfWriter = new DBFWriter(new File(path));
//获取字段
String[] fieldName = getFieldName(path, "GBK");
for (Map<String, String> rowMap : rowList) {
Object[] rowData = new Object[fieldName.length];
for (int i = 0; i < rowData.length; i++) {
//根据字段来排列指,不然可能出现错位情况
rowData[i] = rowMap.get(fieldName[i]);
}
//添加记录(此时并没有写入文件)
dbfWriter.addRecord(rowData);
}
//写入dbf文件并保存关闭
dbfWriter.close();
} public static void main(String[] args) {
List<Map<String, String>> mapList = new ArrayList<>();
Map<String, String> map = new HashMap<>();
map.put("name","A10");
map.put("length","18");
mapList.add(map);
//创建文件
createDbf("src\\demo\\knowledgepoints\\dbf\\1.DBF",mapList,"GBK"); mapList.clear();
map = new HashMap<>();
map.put("A10","蕾蕾");
mapList.add(map);
//写文件
writeDbf("src\\demo\\knowledgepoints\\dbf\\1.DBF",mapList,"GBK"); //读取
mapList = readDbf("src\\demo\\knowledgepoints\\dbf\\1.DBF","GBK");
System.out.println(mapList);
}
}
运行结果:
文件也在对应位置:
参考:https://blog.csdn.net/u010689849/article/details/90340745
《Java知识应用》Java读写DBF文件的更多相关文章
- Java知识体系
Java知识体系 java知识结构.jpg web框架.jpg 计算机课程体系.png 2016-08-19_090929.png 流行的哈希算法生存状况.jpg "JAVA之父" ...
- JAVA核心技术I---JAVA基础知识(二进制文件读写和zip文件读写)
一:二进制文件读写 (一)写文件 –先创建文件,写入数据,关闭文件 –FileOutputStream, BufferedOutputStream,DataOutputStream –DataOutp ...
- Java读取Level-1行情dbf文件极致优化(2)
最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的.接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源.虽然Level-1 ...
- java开发知识IO知识之输入输出流以及文件
目录 java开发知识IO知识之输入输出流以及文件 一丶流概述 二丶输入流讲解 InputStream类. 1. 输入流以及类层次结构 2.文件操作.使用输入流读取 三丶输出流 OutputStrea ...
- java通过dom读写xml文件
java通过dom读写xml文件 要读的xml文件 <?xml version="1.0" encoding="GB2312"?><学生花名册 ...
- Java基础知识笔记(三:文件与数据流)
一.输入流与输出流 输入流将数据从文件.标准输入或其他外部输入设备中加载到内存.输出流的作用则刚好相反,即将在内存中的数据保存到文件中,或传输给输出设备.输入流在Java语言中对应于抽象类java.i ...
- Java读写资源文件类Properties
Java中读写资源文件最重要的类是Properties 1) 资源文件要求如下: 1.properties文件是一个文本文件 2.properties文件的语法有两种,一种是注释,一种属性配置. 注 ...
- Java读取Level-1行情dbf文件极致优化(3)
最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的.接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源.虽然Level-1 ...
- Java程序员的日常—— Properties文件的读写
在日常的Java程序开发中,Properties文件的读写是很常用的.经常有开发系统通过properties文件来当做配置文件,方便用户对系统参数进行调整. 那么本片就来简单的介绍下,如何使用Prop ...
随机推荐
- ubantu删除源码安装文件
1.在安装目录下执行 make uninstall (如安装目录为/opt/software/opencv3.1.0/release) 2.删除系统相关文件 cd /usr sudo find . - ...
- Windows使用Java执行cmd代码
话不多说,直入正题 今天给大家分享下,怎么在Windows上使用Java执行Cmd代码! 首先默认大家都熟悉cmd代码,以及cmd的命令行操作. 直接在main方法中写这一行(需要抛出异常),可以直接 ...
- TraceID在AspNETCore日志排障中的应用
前言 .NetCore日志,相信大家多少都接触过,博客园有关 ① AspNetCore依赖注入第三方日志组件 ②第三方日志组件Nlog,Serilog 应用方法的博文层出不穷. 结合程序的部署结构 ...
- RPM命令执行失败:bash: rpm: 未找到命令...
出现错误截图如下: 这是由于误操作导致rpm文件缺失导致 将另一台完好的服务器上RPM文件及缺失文件上传至异常服务器上即可修复 异常服务器A:192.168.1.230 完好服务器B: 任意 服务器B ...
- Webstrom怎么修改主题
开发Node.js程序,当选首选的是webstorm IDE工具,这个不用解释.但是可能很多习惯其它IDE的同学在使用Webstorm的时候,后感觉webstorm的主题,并不怎么适合自己的审美.就 ...
- Spring Cloud Alibaba(五)RocketMQ 异步通信实现
本文探讨如何使用 RocketMQ Binder 完成 Spring Cloud 应用消息的订阅和发布. 介绍 RocketMQ 是一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的.高 ...
- 英语口语考试资料Volunteers
Being a volunteer is great! There are lots of volunteers around us now. And they don’t do it ...
- 2019-2020-1 20199304《Linux内核原理与分析》第七周作业
进程的描述和进程的创建 1.进程描述 1.1操作系统的三大管理功能以及对应的抽象概念: 进程管理 内存管理 文件系统 1.2Linux进程的状态: (1)Linux中进程的状态细分可以分为七种: R运 ...
- 获取JVM转储文件的Java工具类
在上期文章如何获取JVM堆转储文件中,介绍了几种方法获取JVM的转储文件,其中编程方法是里面唯一一个从JVM内部获取的方法.这里就不演示了其他方法获取正在运行的应用程序的堆转储,重点放在了使用编程来获 ...
- 一文了解Nuget的使用
Nuget介绍 官网定义:NuGet是.NET的软件包管理器(免费).NuGet客户端工具提供了生成和使用软件包的能力.NuGet Gallery 是所有软件包作者和消费者都使用的中央软件包存储库. ...