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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: springboot解析txt文件顺便加到数据库中(nohup文件)


现在是: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文件中删掉继续执行即可。
相关文章
|
19天前
|
数据库 索引
深入探索数据库索引技术:回表与索引下推解析
【10月更文挑战第15天】在数据库查询优化的领域中,回表和索引下推是两个核心概念,它们对于提高查询性能至关重要。本文将详细解释这两个术语,并探讨它们在数据库操作中的作用和影响。
42 3
|
25天前
|
存储 NoSQL 关系型数据库
数据库技术深度解析:从基础到进阶
【10月更文挑战第17天】数据库技术深度解析:从基础到进阶
55 0
|
18天前
|
存储 负载均衡 监控
数据库多实例的深入解析
【10月更文挑战第24天】数据库多实例是一种重要的数据库架构方式,它为数据库的高效运行和灵活管理提供了多种优势。在实际应用中,需要根据具体的业务需求和技术环境,合理选择和配置多实例,以充分发挥其优势,提高数据库系统的性能和可靠性。随着技术的不断发展和进步,数据库多实例技术也将不断完善和创新,为数据库管理带来更多的可能性和便利。
88 57
|
1月前
|
Web App开发 SQL 数据库
使用 Python 解析火狐浏览器的 SQLite3 数据库
本文介绍如何使用 Python 解析火狐浏览器的 SQLite3 数据库,包括书签、历史记录和下载记录等。通过安装 Python 和 SQLite3,定位火狐数据库文件路径,编写 Python 脚本连接数据库并执行 SQL 查询,最终输出最近访问的网站历史记录。
|
1月前
|
存储 关系型数据库 MySQL
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
27 2
|
1月前
|
SQL 存储 关系型数据库
SQL文件导入MySQL数据库的详细指南
数据库中的数据转移是一项常规任务,无论是在数据迁移过程中,还是在数据备份、还原场景中,导入导出SQL文件显得尤为重要。特别是在使用MySQL数据库时,如何将SQL文件导入数据库是一项基本技能。本文将详细介绍如何将SQL文件导入MySQL数据库,并提供一个清晰、完整的步骤指南。这篇文章的内容字数大约在
124 1
|
1月前
|
SQL 开发框架 .NET
ASP.NET连接SQL数据库:实现过程与关键细节解析an3.021-6232.com
随着互联网技术的快速发展,ASP.NET作为一种广泛使用的服务器端开发技术,其与数据库的交互操作成为了应用开发中的重要环节。本文将详细介绍在ASP.NET中如何连接SQL数据库,包括连接的基本概念、实现步骤、关键代码示例以及常见问题的解决方案。由于篇幅限制,本文不能保证达到完整的2000字,但会确保
|
1月前
|
Oracle 关系型数据库 数据库
oracle数据恢复—Oracle数据库文件损坏导致数据库打不开的数据恢复案例
打开oracle数据库时报错,报错信息:“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。急需恢复zxfg用户下的数据。 出现上述报错的原因有:控制文件损坏、数据文件损坏、数据文件与控制文件的SCN不一致等。数据恢复工程师对数据库文件做进一步检测分析后发现sysaux01.dbf文件有坏块。修复sysaux01.dbf文件,启动数据库依然有许多查询报错。export和data pump工具无法使用,查询告警日志并分析报错,确认发生上述错误的原因就是sysaux01.dbf文件损坏。由于该文件损坏,从数据库层面无法修复数据库。由于system和用户表空间的数据文件是正常的,
|
存储 前端开发 Java
SpringBoot文件上传和下载
SpringBoot文件上传和下载
SpringBoot文件上传和下载
|
前端开发 Java Spring
SpringBoot文件上传下载
SpringBoot文件上传下载
255 0
SpringBoot文件上传下载

推荐镜像

更多