//通过后台代码与CMD交互 访问本地jar
try {
//编辑命令 调用jar + 信息
String cmd="cmd /c java -jar 123.jar ";
Runtime runtime = Runtime.getRuntime();
//执行cmd
Process process = runtime.exec(cmd);
// process.getInputStream() 是在你输入参数之后,获取控制台返回给你的信息
//(new InputStreamReader(process.getInputStream(),"gb2312")中gb2312 转码使BufferedReader读取无乱码
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream(),"gb2312"));
//打印第一次返回信息
System.out.println("第一次调用jar返回信息 "+br.readLine());
// process.getOutputStream()获取的是你的输入参数
PrintWriter writer=new PrintWriter(process.getOutputStream());
//第二次输入cmd命令
writer.println("ppp");
//输出到控制台
writer.flush();
String json=null;
while ((json = br.readLine()) != null) {
//返回信息按行读取
System.out.println("第二次输入返回信息 "+json);
}
} catch (IOException e) {
e.printStackTrace();
}
//另外的一种方式
private
OutputStream outputStream;
private
BufferedReader br;
//初始化加载
@PostConstruct
void init() {
if ("windows".equals(os)) {
try {
//编辑命令 调用jar + 信息
String cmd = "cmd /c java -jar " + 123.jar;
System.out.println(cmd);
Runtime runtime = Runtime.getRuntime();
//执行cmd
Process process = runtime.exec(cmd);
// process.getInputStream() 是在你输入参数之后,获取控制台返回给你的信息
//(new InputStreamReader(process.getInputStream(),"gb2312")中gb2312 转码使BufferedReader读取无乱码
br = new BufferedReader(new InputStreamReader(process.getInputStream(), "GB2312"));
//打印第一次返回信息
System.out.println(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()).toString() + "第一次调用jar返回信息 " + br.readLine());
// process.getOutputStream()获取的是你的输入参数
outputStream = process.getOutputStream();
} catch (IOException e) {
e.printStackTrace();
}
} else {
try {
String cmd = "java -jar " + 123.jar ;
String[] command = {"/bin/sh", "-c", cmd};
//编辑命令 调用jar + 信息
System.out.println(command);
Runtime runtime = Runtime.getRuntime();
//执行cmd
Process process = runtime.exec(command);
// process.getInputStream() 是在你输入参数之后,获取控制台返回给你的信息
//(new InputStreamReader(process.getInputStream(),"gb2312")中gb2312 转码使BufferedReader读取无乱码
br = new BufferedReader(new InputStreamReader(process.getInputStream(), "utf8"));
//打印第一次返回信息
System.out.println(br.readLine());
// process.getOutputStream()获取的是你的输入参数
outputStream = process.getOutputStream();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@GetMapping("validate")
// 锁一下并发,防止获取数据时有其他输入
public synchronized String validate(@RequestParam("text") String text, HttpServletRequest request) {
//System.out.println(text);
StringBuilder stringBuilder = new StringBuilder();
try {
//第二次输入cmd命令
outputStream.write(text.getBytes("GB2312"));
outputStream.write("\n".getBytes());
//输出到控制台
outputStream.flush();
String json = null;
while ((json = br.readLine()) != null) {
//返回信息按行读取
if ("请输入测试用例,退出请输入 \"quit\"!".equals(json)) {
break;
}
//输出返回信息
System.out.println(json);
stringBuilder.append(json);
}
} catch (IOException e) {
e.printStackTrace();
}
//用指定的一个类接输出信息
Obj jecObj = JsonUtils.fromJson(stringBuilder.toString(), Obj.class);
RObj j = new RObj();
j.setText(text);
j.setConfidence(jecObj.result.matchInfo.confidence);
j.setStatus(jecObj.returnX);
j.setQuestionStd(jecObj.result.matchInfo.questionStd);
j.setScore(jecObj.result.matchInfo.score);
String retString = JsonUtils.toJson(j);
log.info( "输入内容:" + text + "输出结果:" + retString);
// log.info(retString);
return retString;
}
后台与CMD交互访问本地文件
最新推荐文章于 2022-05-09 14:39:52 发布
这篇博客主要展示了如何通过Java的Runtime类与CMD命令行进行交互,调用本地的jar文件并传递参数。内容包括如何读取和写入命令行输出,以及处理可能的异常情况。在Windows环境下,采用'cmd/c java-jar'命令,在非Windows环境下,使用'/bin/sh -c'命令。同时,文章还展示了如何在接收到特定输入时终止命令的执行,并将结果转化为JSON对象返回。
摘要由CSDN通过智能技术生成