使用Java读写dbf文件【附源代码】

简介: 使用Java读写dbf文件【附源代码】

主要代码如下:

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);
      
        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;
}

相关文章
|
1月前
|
Java
有关Java发送邮件信息(支持附件、html文件模板发送)
有关Java发送邮件信息(支持附件、html文件模板发送)
31 1
|
1月前
|
Java
java中替换文件内容
java中替换文件内容
14 1
|
1月前
|
Java API
Java中文件与输入输出
Java中文件与输入输出
|
1月前
|
Java
java实现遍历树形菜单方法——映射文件VoteTree.hbm.xml
java实现遍历树形菜单方法——映射文件VoteTree.hbm.xml
10 0
|
1月前
|
Java
java实现动态验证码源代码——绘制验证码的jsp
java实现动态验证码源代码——绘制验证码的jsp
13 0
|
1月前
|
前端开发 Java
java实现动态验证码源代码——jsp页面
java实现动态验证码源代码——jsp页面
13 0
|
1月前
|
Java
java程序导出堆文件
java程序导出堆文件
|
1月前
|
SQL Oracle Java
sql文件批处理程序-java桌面应用
sql文件批处理程序-java桌面应用
25 0
|
6天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
33 3
|
1天前
|
存储 前端开发 Java
Java实现文件分片上传
Java实现文件分片上传
5 0