网站首页 > java教程 正文
续上文:
当要批量的数据过大(比如100万的数据量),网页工具生成模板会网页异常和失败。
考虑用Java控制台小程序(通过程序快速执行和实现)
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 &
猜你喜欢
- 2024-11-13 Java+Redis 通过Lua 完成库存扣减,创建消息队列,异步处理消息
- 2024-11-13 [每日一题][Redis]为什么Lua脚本可以保证原子性?
- 2024-11-13 python脚本查找java类所属jar包(python 调用jar)
- 2024-11-13 Gradle 6.4 RC4 发布,带来 Java 模块、Groovy DSL 脚本插件
- 2024-11-13 Scala声明变量 定义函数 编写脚本
- 2024-11-13 Javacom英文脚本手写字体(java脚本怎么写)
- 2024-11-13 宝藏脚本!Linux系统快速启动Java应用服务,提升开发效率!
- 2024-11-13 分享一个实用脚本——服务器日志清理脚本
- 2024-11-13 只因知晓Java平台的脚本引擎,面试官当场录用:这小子还不错
- 2024-11-13 Shell编程:命令列表 && 和 ||
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)