Java 执行CMD命令或执行BAT批处理方式
作者:它山之石,可以攻玉 时间:2022-10-15 03:57:38
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
标签:Java,CMD命令,BAT,批处理
0
投稿
猜你喜欢
Java中遍历Map集合的5种方式总结
2023-04-29 13:14:25
Java中垃圾回收器GC对吞吐量的影响测试
2022-12-16 12:15:53
spring boot 使用profile来分区配置的操作
2022-11-27 22:55:15
Android中ImageCropper矩形、圆形 裁剪框的实现方法
2022-04-17 02:41:28
IDEA2022版本创建maven web项目的两种方式详解
2022-04-24 19:34:54
unity5.6 导出gradle工程 Android Studio 导入问题及处理方法
2022-03-12 00:45:25
Android实现屏幕旋转四个方向准确监听
2022-06-07 08:57:32
java中fork-join的原理解析
2023-12-13 08:49:16
spring MVC中接口参数解析的过程详解
2023-11-28 09:17:50
在Ubuntu中安装VSCode并配置C/C++开发环境的方法步骤
2021-07-04 18:19:19
利用C#实现网络爬虫
2022-03-26 18:40:25
Feign如何自定义注解翻译器
2022-11-09 07:05:04
java 创建自定义数组
2022-09-02 11:18:45
Struts2下拉框实例解析
2021-09-16 16:29:59
Android 沉浸式改变小米魅族状态栏颜色的实例代码
2023-11-18 15:13:16
C#图像处理之边缘检测(Sobel)的方法
2022-05-12 02:05:50
一文告诉你为什么要重写hashCode()方法和equals()方法
2021-09-05 07:05:55
C#微信公众号开发之接收事件推送与消息排重的方法
2022-01-31 08:44:46
Java编程基本概念
2023-09-07 07:15:50
add方法理解ArrayList的扩容机制
2023-11-24 02:16:28