需求:查找后台代码中写的SQL是否包含拆分表,如果存在,则返回那些表名

Context.txt 粘贴我们找到的DAO层代码,因为所有方法封装的SQL都在DAO层里【就理解为筛查的字符串】

Dictionary.txt 存放了拆分表的名字,也就是字典

Output.log 输出日志

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.util.*;
import java.util.logging.Logger; public class Main { private static Logger logger = Logger.getLogger(Main.class.getName()); // 当前程序所在路径
private static final String LOCAL_PATH = System.getProperty("user.dir");
private static final String CONTEXT_FILE_PATH = LOCAL_PATH + "\\Context.txt";
private static final String DICTIONARY_FILE_PATH = LOCAL_PATH + "\\Dictionary.txt";
private static final String OUTPUT_FILE_PATH = LOCAL_PATH + "\\Output.log"; public static void main(String[] args) throws Exception { FileReader contextFileReader = new FileReader(CONTEXT_FILE_PATH);
BufferedReader contextBufferedReader = new BufferedReader(contextFileReader); FileReader dictionaryFileReader = new FileReader(DICTIONARY_FILE_PATH);
BufferedReader dictionaryBufferedReader = new BufferedReader(dictionaryFileReader); FileWriter outputFileWriter = new FileWriter(OUTPUT_FILE_PATH);
BufferedWriter outputBufferedWriter = new BufferedWriter(outputFileWriter); // 加载字典
String dictString = dictionaryBufferedReader.readLine();
// 封装结构
List<String> dictList = Arrays.asList(dictString.split(",")); // 扫描的context行
String tempRow = ""; LinkedHashMap<String, Object> linkedHashMap = new LinkedHashMap();
linkedHashMap.put("flag", false); LinkedList linkedList = new LinkedList(); // 对context进行扫描
while (null != (tempRow = contextBufferedReader.readLine())) {
// 创建字典的迭代器
Iterator<String> iterator = dictList.iterator(); // 迭代扫描
while (iterator.hasNext()) {
String perDict = iterator.next(); // 遍历的每一个字典的字
// 判断context当前行是否包含这个字典
boolean contains = tempRow.toLowerCase().contains(perDict.trim());
int index = tempRow.indexOf(perDict + "_");
if (contains && index == -1) {
if (! linkedList.contains(perDict.trim())) {
linkedList.add(perDict.trim());
} if (contains && ! (Boolean) linkedHashMap.get("flag")) {
linkedHashMap.put("flag", true);
}
}
}
} linkedHashMap.put("containTable", linkedList); outputBufferedWriter.write(linkedHashMap.toString()); outputBufferedWriter.flush(); contextBufferedReader.close();
dictionaryBufferedReader.close();
outputBufferedWriter.close();
logger.info(DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM).format(LocalDateTime.now()) + linkedHashMap.toString()); }
}

封装成JAR 用CMD脚本跑程序【Run.cmd】:

java -jar (定义的jar包文件名) xxx.jar
pause

程序与读取的文件要放在同一个目录下:

【Java】自制查找工具的更多相关文章

  1. Java 标准日志工具 Log4j 的使用(附源代码)

    源代码下载 Log4j 是事实上的 Java 标准日志工具.会不会用 Log4j 在一定程度上可以说是衡量一个开发人员是否是一位合格的 Java 程序员的标准.如果你是一名 Java 程序员,如果你还 ...

  2. Java 问题定位工具 -- jps

    概览 最近老大布置的任务就是质量加固,偶然看到了一些对于 Java 性能分析的介绍,因此,有了此篇学习笔记. JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jCons ...

  3. Java集合——Collections工具类

    Java集合——Collections工具类 摘要:本文主要学习了Collections工具类的常用方法. 概述 Collections工具类主要用来操作集合类,比如List和Set. 常用操作 排序 ...

  4. Linux操作系统的文件查找工具locate和find命令常用参数介绍

    Linux操作系统的文件查找工具locate和find命令常用参数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.非实时查找(数据库查找)locate工具  locate命 ...

  5. java命令--jstack 工具【转载】

    一.介绍 jstack是java虚拟机自带的一种堆栈跟踪工具.jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项&qu ...

  6. linux文件查找工具——locate,find

    一文件查找介绍 文件的查找就是在文件系统上查找符合条件的文件. 文件查找的方式:locate, find非实时查找也就是基于数据库查找的locate,效率特别高. 实时查找:find 二locate ...

  7. 细说Java主流日志工具库

    概述 在项目开发中,为了跟踪代码的运行情况,常常要使用日志来记录信息. 在Java世界,有很多的日志工具库来实现日志功能,避免了我们重复造轮子. 我们先来逐一了解一下主流日志工具. java.util ...

  8. Java 性能分析工具 , 第 3 部分: Java Mission Control

    引言 本文为 Java 性能分析工具系列文章第三篇,这里将介绍如何使用 Java 任务控制器 Java Mission Control 深入分析 Java 应用程序的性能,为程序开发人员在使用 Jav ...

  9. Java 性能分析工具 , 第 2 部分:Java 内置监控工具

    引言 本文为 Java 性能分析工具系列文章第二篇,第一篇:操作系统工具.在本文中将介绍如何使用 Java 内置监控工具更加深入的了解 Java 应用程序和 JVM 本身.在 JDK 中有许多内置的工 ...

  10. HttpTool.java(在java tool util工具类中已存在) 暂保留

    HttpTool.java 该类为java源生态的http 请求工具,不依赖第三方jar包 ,即插即用. package kingtool; import java.io.BufferedReader ...

随机推荐

  1. 判断是否有数据的sql优化

    根据某一条件从数据库表中查询 『有』与『没有』,只有两种状态,那为什么在写SQL的时候,还要SELECT count(*)呢? 多次REVIEW代码时,发现如现现象: 业务代码中,需要根据一个或多个条 ...

  2. 一文详解分布式 ID

    前言 分布式系统中,我们经常需要对数据.消息等进行唯一标识,这个唯一标识就是分布式 ID,那么我们如何设计它呢?本文将详细讲述分布式 ID 及其生成方案. 一.为什么需要分布式 ID 目前大部分的系统 ...

  3. MySQL常见的后端面试题,你会几道?

    为什么分库分表 单表数据量过大,会出现慢查询,所以需要水平分表 可以把低频.高频的字段分开为多个表,低频的表作为附加表,且逻辑更加清晰,性能更优 随着系统的业务模块的增多,放到单库会增加其复杂度,逻辑 ...

  4. python基础-列表list [ ]

    列表的定义和操作 列表的特性: 元素数量 支持多个 元素类型 任意 下标索引 支持 重复元素 支持 可修改性 支持 数据有序 是 使用场景 可修改.可重复的 一批数据记录场景 # 定义一个列表list ...

  5. 国产化率100%!全志科技A40i工业核心板规格书资料分享

    1.核心板简介 创龙科技SOM-TLA40i是一款基于全志科技A40i处理器设计的4核ARM Cortex-A7国产工业核心板,每核主频高达1.2GHz. 核心板通过邮票孔连接方式引出CSI.TVIN ...

  6. ARM+DSP!全志T113-i+玄铁HiFi4开发板硬件说明书(1)

    前 言 本文档主要介绍开发板硬件接口资源以及设计注意事项等内容,测试板卡为全志T113-i+玄铁HiFi4开发板.由于篇幅问题,本篇文章共分为上下两集,点击账户可查看更多内容详情,开发问题欢迎留言,感 ...

  7. 金蝶云·苍穹追光者开发大赛,点燃高校AI应用创新之火

    在 2024 年的政府工作报告中,"人工智能 +" 行动被提出,标志着人工智能成为推动我国新质生产力发展的关键力量.与此同时,今年的高考作文有一道题目也聚焦于人工智能,再次凸显了这 ...

  8. 灰色预测GM(1,1)模型的理论原理

    灰色预测是对时间有关的灰色过程进行预测.通过建立相应的微分方程模型,从而预测事物未来发展趋势的状况. 由于笔者的水平不足,本章只是概括性地介绍GM(1,1)模型的理论原理,便于对初学者的初步理解 目录 ...

  9. pom.xml 指定编译jdk版本

    <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> ...

  10. Golang 切片作为函数参数传递的陷阱与解答

    作者:林冠宏 / 指尖下的幽灵.转载者,请: 务必标明出处. GitHub : https://github.com/af913337456/ 出版的书籍: <1.0-区块链DApp开发实战&g ...