• 【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

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

  • 相关阅读:
    杭电 搜索 1253 胜利大逃亡
    杭电 搜索 1258 Sum It Up
    杭电搜索 2612 Find a way
    杭电 搜索 水题1072 Nightmare
    杭电1175简单搜索 连连看
    杭电 1372 Knight Moves
    杭电 oj Rescue 1242
    杭电 1241 Oil Deposits
    杭电 2100 Children’s Queue
    杭电 1103 Flo's Restaurant
  • 原文地址:https://www.cnblogs.com/mindzone/p/14758058.html
Copyright © 2020-2023  润新知