• 《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

    This moment will nap, you will have a dream; But this moment study,you will interpret a dream.
  • 相关阅读:
    Life Forms POJ
    Musical Theme POJ
    Long Long Message POJ
    ci框架多语言切换
    vi模式
    并发量
    运维技术规划
    Linux装mysqli.so
    任何一门语言思考的
    python例子
  • 原文地址:https://www.cnblogs.com/jssj/p/12047965.html
Copyright © 2020-2023  润新知