【Java】自制查找工具
需求:查找后台代码中写的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】自制查找工具的更多相关文章
- Java 标准日志工具 Log4j 的使用(附源代码)
源代码下载 Log4j 是事实上的 Java 标准日志工具.会不会用 Log4j 在一定程度上可以说是衡量一个开发人员是否是一位合格的 Java 程序员的标准.如果你是一名 Java 程序员,如果你还 ...
- Java 问题定位工具 -- jps
概览 最近老大布置的任务就是质量加固,偶然看到了一些对于 Java 性能分析的介绍,因此,有了此篇学习笔记. JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jCons ...
- Java集合——Collections工具类
Java集合——Collections工具类 摘要:本文主要学习了Collections工具类的常用方法. 概述 Collections工具类主要用来操作集合类,比如List和Set. 常用操作 排序 ...
- Linux操作系统的文件查找工具locate和find命令常用参数介绍
Linux操作系统的文件查找工具locate和find命令常用参数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.非实时查找(数据库查找)locate工具 locate命 ...
- java命令--jstack 工具【转载】
一.介绍 jstack是java虚拟机自带的一种堆栈跟踪工具.jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项&qu ...
- linux文件查找工具——locate,find
一文件查找介绍 文件的查找就是在文件系统上查找符合条件的文件. 文件查找的方式:locate, find非实时查找也就是基于数据库查找的locate,效率特别高. 实时查找:find 二locate ...
- 细说Java主流日志工具库
概述 在项目开发中,为了跟踪代码的运行情况,常常要使用日志来记录信息. 在Java世界,有很多的日志工具库来实现日志功能,避免了我们重复造轮子. 我们先来逐一了解一下主流日志工具. java.util ...
- Java 性能分析工具 , 第 3 部分: Java Mission Control
引言 本文为 Java 性能分析工具系列文章第三篇,这里将介绍如何使用 Java 任务控制器 Java Mission Control 深入分析 Java 应用程序的性能,为程序开发人员在使用 Jav ...
- Java 性能分析工具 , 第 2 部分:Java 内置监控工具
引言 本文为 Java 性能分析工具系列文章第二篇,第一篇:操作系统工具.在本文中将介绍如何使用 Java 内置监控工具更加深入的了解 Java 应用程序和 JVM 本身.在 JDK 中有许多内置的工 ...
- HttpTool.java(在java tool util工具类中已存在) 暂保留
HttpTool.java 该类为java源生态的http 请求工具,不依赖第三方jar包 ,即插即用. package kingtool; import java.io.BufferedReader ...
随机推荐
- minos 1.1 内存虚拟化——hyp
首发公号:Rand_cs minos 1.1 内存虚拟化--hyp 内存虚拟化,目前理解主要两方面: 内存管理,没有虚拟化的情况时,对于 Linux 内核运行在物理硬件之上,内核需要管理物理内存,需要 ...
- CF1777E
problem & blog 反转的边最大权值最小,想到二分. 于是二分代价即可. 反转代价小于二分的代价的边可以反转,所以再建一条反向边即可. 在 DAG 中,存在一个点可以到达所有的点的条 ...
- 地铁查询app 结对作业三
经过今天一下午的奋斗 安卓app 只剩下最难的部分了 最短路径问题 我们考虑用迪杰斯特拉算法 不过 没有做出来 还要继续去学习一下这个代码 并寻求网上代码的帮助
- 简约博客V1.1版本上线 + 一套新主题
Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` 简约博客V1.1版本上线 + 一套新主题 日期:2017- ...
- 【长文】带你搞明白Redis
本文使用第一人称来介绍Redis 一.概述 Redis,英文全称是Remote Dictionary Server(远程字典服务),是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化 ...
- Windows记录登录日志
有的时候,我们希望系统记录登录的日志,以便查看有无他人动过自己的电脑. 步骤 1.在windows中搜索并打开"组策略". 2.点击计算机配置-->Windows设置--&g ...
- Linux 内核:RCU机制与使用
Linux 内核:RCU机制与使用 背景 学习Linux源码的时候,发现很多熟悉的数据结构多了__rcu后缀,因此了解了一下这些内容. 介绍 RCU(Read-Copy Update)是数据同步的一种 ...
- 基于 UDP 的 组播、广播详解
背景 有些时候我们在网络通信中也需要用到 组播(多播).广播.现在我们来介绍如何实现. 建议:在此之前,关闭防火墙. ubuntu: service ufw stop windows: 控制面板关闭 ...
- 【基础推导】MPC控制器及其车辆模型详细推导 (附代码链接及详细推导说明)
0. 参考与前言 Python 代码:github AtsushiSakai/PythonRobotics C++ 代码:github jchengai/gpir/mpc_controller 相关参 ...
- 单片机升级,推荐此79元双核A7@1.2GHz国产平台的8个理由
含税79元即可运行Linux操作系统 对于嵌入式软件开发者而言,单片机令人最痛苦的莫过于文件操作.79元T113-i工业核心板(基于全志国产处理器,国产化率100%)可运行Linux操作系统,可使用L ...