专业的JAVA编程教程与资源

网站首页 > java教程 正文

续:Java的控制台小程序辅助根据模板生成批量脚本

temp10 2024-11-13 12:43:31 java教程 11 ℃ 0 评论

续上文:

Linux通过curl和sh实现批量执行脚本

续:Java的控制台小程序辅助根据模板生成批量脚本

当要批量的数据过大(比如100万的数据量),网页工具生成模板会网页异常和失败。

考虑用Java控制台小程序(通过程序快速执行和实现)

src/main/java/com/zx/app/tool/util/common/template/TemplateToCodeUtil.java · 霜叶/zx-tool-web - Gitee.com

package com.zx.app.tool.util.common.template;

import java.io.*;
import java.util.Scanner;

public class TemplateToCodeUtil {

    private static String strTrim(String data) {
        if (data == null) {
            return "";
        }

        return data.trim();
    }

    private static boolean strIsEmpty(String data) {
        if (data == null || data.length() == 0) {
            return true;
        }
        return false;
    }

    private static String templateToCode(String templateText, String inputText) {
        StringBuilder result = new StringBuilder();
        String[] sA = inputText.split("" + '\n');
        int idx = 0;
        String strItem = null;
        String code = null;
        for (String each : sA) {
            strItem = strTrim(each);
            if (strItem.length() == 0) {
                continue;
            }
            ++idx;
            code = templateText;
            code = code.replace("{0}", strItem);
            code = code.replace("{$rowNum}", Integer.toString(idx));

            result.append(code);
        }

        return result.toString();
    }

    private static final String EXIT_NAME = "exit";
    private static final String YES_NAME = "yes";
    private static final String NO_NAME = "no";

    private static boolean fileIsExist(String fileName) {
        if (fileName == null || fileName.trim().length() == 0) {
            return false;
        }

        File data = new File(fileName);
        return data.exists();
    }

    private static String getSystemInput(Scanner sysInput, String text, boolean trimFlag) {
        String result = null;
        while (true) {
            System.out.println(text);
            result = sysInput.nextLine();
            if (result == null || result.length() == 0) {
                continue;
            }

            if (trimFlag) {
                if (result.trim().length() == 0) {
                    continue;
                }
            }

            break;
        }

        return result;
    }


    private static String readFileContentByUtf8(String filePath) {
        return readFileContent(filePath, "UTF-8");
    }

    /**
     * @param filePath
     * @param charsetName
     * @return
     */
    private static String readFileContent(String filePath, String charsetName) {
        if (filePath == null || filePath.length() == 0) {
            return "";
        }
        File fi = new File(filePath);
        if (!fi.exists()) {
            return "";
        }

        StringBuilder result = new StringBuilder();
        try {
            BufferedReader bfr = new BufferedReader(new InputStreamReader(new FileInputStream(fi), charsetName));
            String lineTxt = null;
            while ((lineTxt = bfr.readLine()) != null) {
                result.append(lineTxt).append("\n");
            }
            bfr.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result.toString();
    }

    // region writeFile:写入文件

    /**
     * @param fileFullName  | 文件完整路径
     * @param content       | 文件内容
     * @param overwriteFlag | 是否写入文件
     * @param appendFlag    | 追加内容
     * @return
     */
    private static boolean writeFile(String fileFullName, String content, boolean overwriteFlag, boolean appendFlag) {
        return writeFile(fileFullName, content, overwriteFlag, appendFlag, "");
    }

    private static boolean writeFile(String fileFullName, String content, boolean overwriteFlag, boolean appendFlag, String charsetName) {

        FileWriter fw = null;
        boolean result = false;
        try {
            File fileV = new File(fileFullName);

            boolean createFileFlag = false;
            if (fileV.exists()) {
                if (!overwriteFlag) {
                    return false;
                }

                if (!appendFlag) {
                    result = fileV.delete();
                    if (!result) {
                        return false;
                    }

                    createFileFlag = true;
                }
            } else {
                createFileFlag = true;
            }

            if (createFileFlag) {
                if (!fileV.getParentFile().exists()) {
                    fileV.getParentFile().mkdirs();
                }

                fileV.createNewFile();
            }

            // 使用true,即进行append file //
            if (charsetName == null || charsetName.length() == 0) {
                fw = new FileWriter(fileV.getPath(), appendFlag);
            } else {
                fw = new FileWriter(fileV.getPath(), appendFlag);
            }
            fw.write(content);
            fw.flush();

            result = true;
        } catch (IOException e) {
            e.printStackTrace();
            result = false;
        } finally {
            try {
                if (fw != null) {
                    fw.close();
                }
            } catch (Exception err) {
                err.printStackTrace();
            }
        }

        return result;
    }

    // endregion writeFile:写入文件

    public static void main(String[] args) {

        String templateName = null;
        String inputName = null;
        String outName = null;

        boolean inputFlag = false;
        if (args != null && args.length >= 3) {
            int idx = 0;
            templateName = strTrim(args[idx++]);
            inputName = strTrim(args[idx++]);
            outName = strTrim(args[idx++]);
            inputFlag = true;
        }

        Scanner sysInput = new Scanner(System.in);

        String str = null;


        String labelName = null;
        String tipText = null;
        while (true) {

            if( inputFlag){
                System.out.println("模板:" + templateName);
                System.out.println("输入:" + inputName);
                System.out.println("输出:" + outName);

                while (true) {
                    tipText = "确认请输入:yes/重新填写请输入:no(退出输入exit):";
                    str = getSystemInput(sysInput, tipText, true);

                    str = str.trim();
                    if (EXIT_NAME.equals(str) ||
                            YES_NAME.equals(str) ||
                            NO_NAME.equals(str)) {
                        break;
                    }
                }

                if (EXIT_NAME.equals(str) ||
                        YES_NAME.equals(str)) {
                    break;
                }
            }

            for (int i = 0; i < 3; ++i) {
                switch (i) {
                    case 0:
                        labelName = "模板";
                        break;
                    case 1:
                        labelName = "输入文件";
                        break;
                    case 2:
                        labelName = "输出文件";
                        break;
                }

                tipText = "请输入" + labelName + "路径(退出输入exit):";
                str = getSystemInput(sysInput, tipText, true);
                str = str.trim();
                if (EXIT_NAME.equals(str)) {
                    break;
                }

                switch (i) {
                    case 0:
                        templateName = str;
                        break;
                    case 1:
                        inputName = str;
                        break;
                    case 2:
                        outName = str;
                        break;
                }
            }

            if (EXIT_NAME.equals(str)) {
                break;
            }

            inputFlag  = true;
        }

        if (EXIT_NAME.equals(str)) {
            return;
        }

        if (!fileIsExist(templateName)) {
            System.out.println("模板文件不存在");
            return;
        }

        if (!fileIsExist(inputName)) {
            System.out.println("输入文件不存在");
            return;
        }

        if (fileIsExist(outName)) {
            while (true) {
                tipText = "输出文件已存在,是否覆盖(yes/no):";
                str = getSystemInput(sysInput, tipText, true);

                if (YES_NAME.equals(str) ||
                        NO_NAME.equals(str)) {
                    break;
                }
            }

            if (NO_NAME.equals(str)) {
                return;
            }
        }

        String templateText = readFileContentByUtf8(templateName);
        String inputText = readFileContentByUtf8(inputName);

        if (strIsEmpty(templateText)) {
            System.out.println("模板文件为空");
            return;
        }

        if (strIsEmpty(inputName)) {
            System.out.println("输入文件为空");
            return;
        }

        String outText = templateToCode(templateText, inputText);
        writeFile(outName, outText, true, false, "UTF-8");
        System.out.println("执行完成");
    }

}


批量脚本模板:

curl \
-H'Content-Type:application/json' \
-H'zx-name:headerZxName' \
-X POST \
--data '{"input":"{0}","name":"myweb"}' \
http://106.55.226.23:8085/zx-tool-web/ctrl/tool/common/curlPostDemo

echo {Seq.1} -- {0}

sleep 1s

界面效果:








相关的脚本:

javac -encoding UTF-8 com/zx/app/tool/util/common/template/TemplateToCodeUtil.java
java com.zx.app.tool.util.common.template.TemplateToCodeUtil /webapp/tmp/t.txt /webapp/tmp/i.txt /webapp/tmp/o.sh

nohup sh o.sh > log.log 2>&1 &

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表