主要代码如下:
pom.xml文件中引入所需依赖;
com.github.albfernandez
javadbf
1.9.2
创建返回实体类 DBFInfo.java
/**
- @author 公众号: SimpleMemory
- @version 1.0.0
- @ClassName DBFInfo.java
- @Description DBF文件封装实体类
- @createTime 2022年02月26日 20:37:00
*/
@Data
public class DBFInfo {
// 字段数量
private Integer fieldCount;
// 字段名
private String[] fieldName;
// 记录
List> rowList;
//记录数量
Integer recordCount;
}
核心实现类
/**
- @author 公众号: SimpleMemory
- @version 1.0.0
- @ClassName DBFUtils.java
- @Description 读取DBF文件工具类
@createTime 2022年02月26日 20:27:00
/
@Slf4j
public class DBFUtils {
/*- 读取DBF文件
* - @param filePath 文件路径
- @param charsetName
- @return
@throws IOException
*/
public static DBFInfo readDBFFile(String filePath, String charsetName) throws IOException {
DBFInfo dbfInfo = new DBFInfo();
FileInputStream inputStream = null;
DBFReader dbfReader = null;
Object[] rowVales = null;
List> rowList = new ArrayList<>();
File file = new File(filePath);
if (!file.exists()) {log.error("文件路径:{},该文件不存在!", filePath); return dbfInfo;
}
try {log.debug("开始读取DBF文件,文件路径为: {}", filePath); inputStream = new FileInputStream(filePath); dbfReader = new DBFReader(inputStream, Charset.forName(charsetName), false); // 字段数量 int fieldCount = dbfReader.getFieldCount(); log.debug("读取DBF文件,字段数量为:{}个!", fieldCount); // 记录数量 int recordCount = dbfReader.getRecordCount(); log.debug("读取DBF文件,数据量为:{}个!", recordCount);
- 读取DBF文件
String[] fieldName = new String[fieldCount];
for (int i = 0; i < fieldCount; i++) {
fieldName[i] = dbfReader.getField(i).getName();
}
dbfInfo.setFieldCount(fieldCount);
dbfInfo.setFieldName(fieldName);
dbfInfo.setRecordCount(recordCount);
while ((rowVales = dbfReader.nextRecord()) != null) {
Map<String, String> rowMap = new HashMap<String, String>();
for (int i = 0; i < rowVales.length; i++) {
rowMap.put(dbfReader.getField(i).getName(), String.valueOf(rowVales[i]).trim());
}
rowList.add(rowMap);
}
if (CollectionUtils.isNotEmpty(rowList)) {
dbfInfo.setRowList(rowList);
}
return dbfInfo;
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != inputStream) {
inputStream.close();
}
if (null != dbfReader) {
dbfReader.close();
}
}
return dbfInfo;
}