springboot解析txt文件顺便加到数据库中(nohup文件)

举报
穆雄雄 发表于 2022/12/07 21:50:04 2022/12/07
【摘要】 大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂 前言现在是:2022年4月20日13:33:23以前是怎么都没想到,我需要在服务器的nohup文件中找记录,然后往数据库里面更新。具体因为啥不提了,说多了都是愧啊~今天主要是分享一个java解析nohup文件提取关注的信息,然后添加到数据库中。 实现思路刚开始我是直接将nohup文件中的信息手动复制出来,然后写了个insert的sql语句,...

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂

前言

现在是:2022年4月20日13:33:23

以前是怎么都没想到,我需要在服务器的nohup文件中找记录,然后往数据库里面更新。具体因为啥不提了,说多了都是愧啊~今天主要是分享一个java解析nohup文件提取关注的信息,然后添加到数据库中。

实现思路

刚开始我是直接将nohup文件中的信息手动复制出来,然后写了个insertsql语句,一条一条的往里面添加,结果发现有上千条,这么干不睡觉都加不进去多少,于是想到了找小杨小于帮帮忙,无奈有点复杂,光给他两讲怎么加讲了半天,还不能保证他两会了,数据能加对。。。。。

后来想了个办法,将nohup文件先转换成txt文件,然后解析txt文件,根据关键字提取关键信息,拿到之后截取成固定字符串,通过jdbc的方式添加在数据库中。

  1. nohup文件的后缀改成txt
  2. 观察自己关注的数据的规律,尤其是前后有什么可以标识的,看了看,可以根据Parameters这个来解析。

  1. 因为很不规律,所以有单独查找了下(Timestamp),截取成一个字符串
  2. 本来想着按照逗号来将这个字符串中所有需要的信息截取到,依次添加到数据库中,结果发现有个字段是介绍,里面的值也有逗号,有中文的逗号,也有因为的逗号,这种方法看来行不通。
  3. 想办法查找(Stirng),全文替换成~,然后按照~查找,最后在截取,终于可行了。

实现代码

1.按照Parameters解析txt文件:

	package com.ruoyi.web.controller.util;

	import com.ruoyi.system.domain.EquipmentRZ;

	import java.io.File;
	import java.io.FileNotFoundException;
	import java.text.ParseException;
	import java.text.SimpleDateFormat;
	import java.util.Scanner;

	/**
	 * @author: muxiongxiong
	 * @date: 2022年04月19日 上午 11:05
	 * 公众号:雄雄的小课堂
	 * 博客:https://blog.csdn.net/qq_34137397
	 * 个人站:http://www.穆雄雄.com
	 * 个人站:http://www.muxiongxiong.cn
	 * @Description: 解析txt文件获取里面的数据
	 * 最初解析的是nohup文件,现在改为解析txt文件
	 * 将txt文件里面的内容,解析成对象,添加到认证器材表里去
	 */
	public class ParseTXTFileUtils {

	    public void parseTxt(){
	        File file = new File("D:\\test3.txt");
	        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	        if (!file.exists()) {
	            System.out.println("节点基本信息文件未找到");
	        }

	        Scanner s = null;
	        try {
	            s = new Scanner(file);
	        } catch (FileNotFoundException e) {
	            e.printStackTrace();
	        }

	        while (true) {
	            //文档中的内容
	            String danci = s.next();
	            if ("Parameters:".equals(danci)) {
	                //开始留存需要的数据.
	                String jixu = "";
	                int count = 0;

	                while (true) {
	                    EquipmentRZ equipmentRZ = new EquipmentRZ();
	                    String danci2 = s.next();
	                    jixu += danci2;
	                    if (danci2.indexOf("Timestamp") != -1) {
	                        String sheng = s.next();
	                        String shi = s.next();
	                        String qu = s.next();
	                        String renzheng = s.next();
	                        String tupian = s.next();
	                        String jieshuriqi = s.next();
	                        jixu += sheng + shi + qu + renzheng + tupian + jieshuriqi;
	                        //System.out.println("jixu========"+jixu);
	                        //按照逗号分割
	                        String[] split = jixu.split("~,");
	                        //获取到的数据
	                        try {
	                            equipmentRZ.setId(Integer.parseInt(split[0]));
	                            equipmentRZ.setName(split[1]);
	                            equipmentRZ.setXinghao(split[2]);
	                            equipmentRZ.setJianjie(split[3]);
	                            equipmentRZ.setZhuangtai(split[4]);
	                            equipmentRZ.setGongsi1(split[5]);
	                            equipmentRZ.setGongsi2(split[6]);
	                            equipmentRZ.setRealName(split[7]);
	                            equipmentRZ.setLeixing(split[8]);
	                            equipmentRZ.setGongsi3(split[9]);
	                            //2016-11-3011:35:08.0(Timestamp),天津市
	                            String shijian = split[10];
	                            //按照逗号分割
	                            String[] split1 = shijian.split(",");
	                            //截取最后的(Timestamp)
	                            int index = split1[0].lastIndexOf("(");
	                            String kaishishijian = split1[0].substring(0, index);
	                            //第9位后面加上空格
	                            StringBuffer sb = new StringBuffer(kaishishijian);
	                            sb.insert(10, " ");
	                            equipmentRZ.setBeginDate(simpleDateFormat.parse(sb.toString()));
	                            equipmentRZ.setSheng(split1[1]);
	                            equipmentRZ.setShi(split[11]);
	                            equipmentRZ.setJiedao(split[12]);
	                            equipmentRZ.setRenzheng(split[13]);
	                            equipmentRZ.setTupian(split[14]);
	                            String jieshu = split[15] + " 00:00:00";
	                            equipmentRZ.setEndDate(simpleDateFormat.parse(jieshu));
	                            //System.out.println(equipmentRZ);
	                        } catch (ParseException e) {
	                            e.printStackTrace();
	                        }

	                        //调佣添加的方法 将数据添加到数据库
	                        //已经执行完毕 2022年4月19日11:08:54
	                       /* ZhiXingMysql zhiXingMysql = new ZhiXingMysql();
	                        zhiXingMysql.saveEquipmentRZ(equipmentRZ);*/
	                        break;
	                    }
	                }
	            }
	        }
	    }

}

2.由于字段太多了,所以封装了个实体类,字段如下:

	/**
 * @author: muxiongxiong
 * @date: 2022年04月19日 0:25
 * 公众号:雄雄的小课堂
 * 博客:https://blog.csdn.net/qq_34137397
 * 个人站:http://www.穆雄雄.com
 * 个人站:http://www.muxiongxiong.cn
 * @Description: 类的描述
 */
public class EquipmentRZ {

    private Integer id;

    private String name;

    private String xinghao;

    private String jianjie;

    private String zhuangtai;

    private String gongsi1;

    private String gongsi2;

    private String gongsi3;

    private String realName;

    private String leixing;

    private Date beginDate;

    private String sheng;

    private String shi;

    private String jiedao;

    private String tupian;

    private String renzheng;

    private Date endDate;
  }

3.jdbc添加到数据库中的方法:

	public void saveEquipmentRZ(EquipmentRZ equipmentRZ) {
        int success = 0,err=0;
        String sql = "INSERT INTO sys_rzequipment ( equipment_id,equipment_name, equipment_model, equipment_introduction,equipment_status, production_name, maintenance_name, installation_company_name,maintenance_people, equipment_type,  installation_date, installation_province, installation_city, installation_address,  equipment_img_url, create_time,date_come_from ) \n" +
                "VALUES(?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?)";

        Connection connection = null;
        PreparedStatement pStatement = null;
        try {
            connection = getConnection();
            pStatement = connection.prepareStatement(sql);
            pStatement.setInt(1, equipmentRZ.getId());
            pStatement.setString(2, equipmentRZ.getName());
            pStatement.setString(3, equipmentRZ.getXinghao());
            pStatement.setString(4, equipmentRZ.getJianjie());
            pStatement.setString(5, equipmentRZ.getZhuangtai());
            pStatement.setString(6, equipmentRZ.getGongsi1());
            pStatement.setString(7, equipmentRZ.getGongsi2());
            pStatement.setString(8, equipmentRZ.getGongsi3());
            pStatement.setString(9, equipmentRZ.getRealName());
            pStatement.setString(10, equipmentRZ.getLeixing());
            pStatement.setObject(11, equipmentRZ.getBeginDate());
            pStatement.setString(12, equipmentRZ.getSheng());
            pStatement.setString(13, equipmentRZ.getShi());
            pStatement.setString(14, equipmentRZ.getJiedao());
            pStatement.setString(15, equipmentRZ.getTupian());
            pStatement.setObject(16, equipmentRZ.getEndDate());
            pStatement.setString(17, equipmentRZ.getRenzheng());
            int count = pStatement.executeUpdate();
            if(count>0){
                success++;
                System.out.println("成功:"+success+"==="+equipmentRZ.getId());
            }else{
                err++;
                System.out.println("失败:"+err+"===="+equipmentRZ.getId());
            }
        } catch (Exception e) {
            e.printStackTrace();

        } finally {
            closePreparedStatement(pStatement);
            closeConnection(connection);
        }
    }

最后运行main方法就可以了。、

注意事项

  • 为了保险起见,刚开始测试的时候测试添加的数据尽量的少点儿,也就是将txt重新复制出来一份,只留几条记录,执行一遍main方法,观察一下数据库中的数据是否正确。
  • 执行的过程中可能会遇到错误,因为Parameters可能在登录操作的时候也会出现,所以遇到不是添加的sql的话,也会报错的,只需要将原来执行过的删掉,不规则的Parameters数据在txt文件中删掉继续执行即可。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。