Java 执行CMD命令或执行BAT批处理方式
作者:它山之石,可以攻玉 发布时间:2022-10-15 03:57:38
标签:Java,CMD命令,BAT,批处理
Java 执行CMD命令或执行BAT批处理
背景
日常开发中总能遇到一些奇怪的需求,例如使用java执行cmd命令或者bat批处理文件,今天就简单记录一下使用过程。
使用
废话不多说直接上代码
import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
public class Cmder {
/**
* 执行一个cmd命令
*
* @param cmdCommand cmd命令
* @return 命令执行结果字符串,如出现异常返回null
*/
public static String executeCmdCommand(String cmdCommand) {
StringBuilder stringBuilder = new StringBuilder();
Process process = null;
try {
process = Runtime.getRuntime().exec(cmdCommand);
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream(), "GBK"));
String line = null;
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line).append(" ");
}
return stringBuilder.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 执行bat文件,
*
* @param file bat文件路径
* @param isCloseWindow 执行完毕后是否关闭cmd窗口
* @return bat文件输出log
*/
public static String executeBatFile(String file, boolean isCloseWindow) {
String cmdCommand = null;
if (isCloseWindow) {
cmdCommand = "cmd.exe /c " + file;
} else {
cmdCommand = "cmd.exe /k " + file;
}
StringBuilder stringBuilder = new StringBuilder();
Process process = null;
try {
process = Runtime.getRuntime().exec(cmdCommand);
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream(), "GBK"));
String line = null;
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line).append(" ");
}
return stringBuilder.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 执行bat文件,新开窗口
*
* @param file bat文件路径
* @param isCloseWindow 执行完毕后是否关闭cmd窗口
* @return bat文件输出log
*/
public static String executeBatFileWithNewWindow(String file, boolean isCloseWindow) {
String cmdCommand;
if (isCloseWindow) {
cmdCommand = "cmd.exe /c start" + file;
} else {
cmdCommand = "cmd.exe /k start" + file;
}
StringBuilder stringBuilder = new StringBuilder();
Process process;
try {
process = Runtime.getRuntime().exec(cmdCommand);
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream(), "GBK"));
String line;
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line).append(" ");
}
return stringBuilder.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 执行bat脚本
*
* @param batScript 脚本内容
* @param location 脚本存储路径
* @return 结果
*/
public static String executeBatScript(String batScript, String location) {
StringBuilder stringBuilder = new StringBuilder();
FileWriter fw = null;
try {
//生成bat文件
fw = new FileWriter(location);
fw.write(batScript);
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
Process process;
try {
process = Runtime.getRuntime().exec(location);
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream(), "GBK"));
String line;
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line).append(" ");
}
return stringBuilder.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 执行脚本,不停止,并输出执行结果
*
* @param batScript 脚本内容
* @param location bat文件生成地址
*/
public void executeBatScriptAlways(String batScript, String location) {
FileWriter fw = null;
try {
//生成bat文件
fw = new FileWriter(location);
fw.write(batScript);
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
StringBuilder stringBuilder = new StringBuilder();
//运行bat文件
Process process;
try {
process = Runtime.getRuntime().exec(location);
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream(), "GBK"));
String line;
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Java 执行系统命令
1. windows
1.1 cmd
第一种方法
File dir = new File("D:\\mysql57\\mysql-5.7.29-winx64\\bin");
// String command="netstat -an";
String command = "c:\\windows\\system32\\cmd.exe /c mysqlbinlog ../data/master-bin.000006 | more";
Runtime r = Runtime.getRuntime();
Process p = r.exec(command, null, dir);
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
StringBuffer sb = new StringBuffer();
String inline;
while (null != (inline = br.readLine())) {
sb.append(inline).append("\n");
}
System.out.println(sb.toString());
第二种方法
try {
File dir = new File("D:\\mysql57\\mysql-5.7.29-winx64\\bin");//此处是指定路径
String[] cmd = new String[] { "cmd", "/c",
"mysqlbinlog -v ../data/master-bin.000006 | more"
};// cmd[2]是要执行的dos命令
System.out.println(cmd[2]);
Process process = Runtime.getRuntime().exec(cmd,null,dir);
// 记录dos命令的返回信息
StringBuffer resStr = new StringBuffer();
// 获取返回信息的流
InputStream in = process.getInputStream();
Reader reader = new InputStreamReader(in);
BufferedReader bReader = new BufferedReader(reader);
for (String res = ""; (res = bReader.readLine()) != null;) {
resStr.append(res + "\n");
}
System.out.println(resStr.toString());
bReader.close();
reader.close();
process.getOutputStream().close(); // 不要忘记了一定要关
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
windows cmd 命令
后台运行
start /b 程序名字
start /b redis-server.exe redis.windows.conf
关闭程序
taskkill /f /t /im 程序名字
taskkill /f /t /im redis-server.exe
查看进程
根据进程名称 查看进程
tasklist|find /i "redis-server.exe"
来源:https://blog.csdn.net/y534560449/article/details/116232595


猜你喜欢
- 一、DataGridView不显示下面的新行通常DataGridView的最下面一行是用户新追加的行(行头显示*)。如果不想让用户新追加行即
- 文件作为存储数据的单元,会根据数据类型产生很多分类,也就是所谓的文件类型。在对数据文件进行操作时,常常需要根据不同的文件类型来作不同的处理。
- 本文实现了C#隐式运行CMD命令的功能。下图是实例程序的主画面。在命令文本框输入DOS命令,点击“Run”按钮,在下面的文本框中输出运行结果
- 在项目开发中经常会遇到调用第三方接口的情况,比如说调用第三方的天气预报接口。使用流程【1】准备工作:在项目的工具包下导入HttpClient
- import java.io.ByteArrayOutputStream;import java.io.InputStream;//从输入流
- Java中如何输出像1-2-3-4-5 这样的字符抱歉对于这个问题我甚至不能想到一个合适的标题,但是不重要 以下操作基于 jdk 1.8St
- 【1】引用命名空间://System.Net.Socketsusing System.Net.Sockets; // 以太网对象
- Android调试出现The selected device is incompatible问题解决在做Android调试时碰到该问题。详情
- 之前写了一篇文章:Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码),介绍了如何使用Java原生IO支持进行网络编程,本文
- 本文研究的主要是JVM中的flag设置详解的相关内容,具体介绍如下。一、堆大小设置-Xmx3550m:设置JVM最大可用内存为3550M。-
- 日常对于金额计算,应该都是用的BigDecimal,可是苦于没有好的工具类方法,现在贡献一个我正在用的对于数字计算的工具类,项目中就是用的这
- 说明:本文记录如何在Idea下,利用Maven管理项目,并整合SSM(Spring + Spring MVC +Mybatis)框架,实现简
- 本想把练习题做了的结果放上来,不过发现附录是有答案的,就算了吧,自己做了没问题就行了哈。之前提到过,要是有朋友有想法,需要做小工具我可以帮忙
- 仿QQ侧滑删除效果图1.自定义listviewpublic class DragDelListView extends ListView {
- 其实以前我对Java的Struts框架没有具体认识,通过这篇文章,真的让我了解了框架的用处,好处。下拉框在Web开发中经常会使用到,下面我们
- 之前写过一篇 Java 线程池的使用介绍文章《线程池全面解析》,全面介绍了什么是线程池、线程池核心类、线程池工作流程、线程池分类、拒绝策略、
- 主要思想:将一个view设计成多层:背景层,含中奖信息等;遮盖层,用于刮奖,使用关联一个Bitmap的Canvas在该Bitmap上,使用它
- 前言在上网的时候我们常常遇到文件上传的情况,例如上传头像、上传资料等;当然除了上传,遇见下载的情况也很多,接下来看看我们 servlet 中
- 符号 ASCII码 &
- java中的JsonSerializer用法背景今天在写项目的时候遇到一个问题,项目中有个类中有创建时间和更新时间两个属性,但是单位在后端用