多个txt文件解析并插入数据库。

当有多个txt文件需要解析数据,并将数插入数据库,可以按如下代码编写。

下面代码只需要文件路径,具体可按照实际需求操作。

代码如下:


import com.fin.util.JsonUtil;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

/**
 * 多个txt 文件解析并入库
 */
public class FileDemo {
    static class Student {
        String name;
        int age;
        String className;
        String address;

        public void setName(String name) {
            this.name = name;
        }

        public void setAge(int age) {
            this.age = age;
        }

        public void setClassName(String className) {
            this.className = className;
        }

        public void setAddress(String address) {
            this.address = address;
        }
    }

    static class FilePojo {
        String filePath;
        String fileName;

        public String getFilePath() {
            return filePath;
        }

        public void setFilePath(String filePath) {
            this.filePath = filePath;
        }

        public String getFileName() {
            return fileName;
        }

        public void setFileName(String fileName) {
            this.fileName = fileName;
        }
    }

    /**
     * 多个txt文件解析入库
     */
    public static void fileStored() {
        //获取txt文件路径  TODO  可以根据实际业务去获取文件路径
        List<FilePojo> fileList = new ArrayList<>();
        FilePojo filePojo1 = new FilePojo();
        filePojo1.setFilePath("D:\\h5\\FileDemo1.java");
        FilePojo filePojo2 = new FilePojo();
        filePojo2.setFilePath("D:\\h5\\FileDemo2.java");
        fileList.add(filePojo1);
        fileList.add(filePojo2);
        System.out.println("打印文件路径集合:" + fileList);
        // 循环,解析文件,插入数据库。
        fileList.forEach(FileDemo::fileStoredParse);

    }

    /**
     * 循环,解析文件,插入数据库。
     *
     * @param pojo 对象
     */
    private static void fileStoredParse(FilePojo pojo) {
        File file = new File(pojo.getFilePath());
        if (!file.exists()) {
            System.out.println("文件不存在,不进行文件入库操作!");
            return;
        }

        //文件解析,并入库
        readeFile(file.getPath());
    }

    /**
     * 文件解析,并入库。每一千条数据 入库一次
     * ★
     * •每个域以|分隔
     * • 文件以UTE-8编码
     * aa|bbb|ccc|ddd|eee|ffff
     *
     * @param path 文件路径
     */
    private static void readeFile(String path) {
        System.out.println("打印文件路径:" + path);
        ArrayList<Student> studentLsit = new ArrayList<>();
        try {
            FileInputStream ip = new FileInputStream(path);
            InputStreamReader ir = new InputStreamReader(ip, "UTF-8");
            BufferedReader br = new BufferedReader(ir);
            {
                String line = null;
                String[] split;
                boolean headFile = true; //跳过文件头
                while (null != (line = br.readLine())) {
                    if (headFile) {
                        headFile = false;
                        continue;
                    }
                    split = line.split("\\|");
                    if (null != split && 0 < split.length) {
                        Student student = new Student();
                        student.setAddress(split[0]);
                        student.setAge(Integer.parseInt(split[1]));
                        student.setClassName(split[2]);
                        student.setName(split[3]);
                        studentLsit.add(student);
                    }
                    if (1000 == studentLsit.size()) {
                        // TODO 插入数据库
                        //清除list
                        studentLsit.clear();
                        System.out.println("每1000条数据入库一次");
                    }
                }

            }
            //不足1000条入库
            if (null != studentLsit || 0 < studentLsit.size()) {
                // TODO 插入数据库
                System.out.println("最后入库条数" + studentLsit.size());
            }

        } catch (Exception e) {
            System.out.println(e);
            //todo 抛错
            //  throw new Exception("文件解析入库有误!!!");
        }
//        finally {
//            不用 释放资源; 上面会自动释放。
//        }

    }


}

谢谢!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值