java如何运行cmd
运行CMD命令的方法
在Java中可以通过Runtime或ProcessBuilder类执行CMD命令。以下是两种常用的实现方式:
使用Runtime.exec()
try {
// 执行简单命令(如dir)
Process process = Runtime.getRuntime().exec("cmd /c dir");
// 获取输出流
BufferedReader reader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
// 等待命令执行完成
int exitCode = process.waitFor();
System.out.println("Exited with code: " + exitCode);
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
使用ProcessBuilder(推荐)
try {
// 构建命令及参数
ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", "ping 127.0.0.1");
builder.redirectErrorStream(true); // 合并错误流到标准输出
// 启动进程
Process process = builder.start();
// 读取输出
try (InputStream input = process.getInputStream();
Scanner scanner = new Scanner(input)) {
while (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}
}
// 检查执行状态
if (process.waitFor() == 0) {
System.out.println("Command executed successfully");
}
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
注意事项
- 复杂命令建议使用
cmd /c前缀,/c表示执行后关闭CMD窗口 - 需要处理命令的输入/输出流,否则可能导致进程阻塞
- 带空格的路径需要用双引号包裹,例如:
Runtime.getRuntime().exec("cmd /c \"C:\\Program Files\\app\\test.exe\""); - 对于需要管理员权限的命令,需通过其他方式提权(如手动以管理员身份运行Java程序)
执行结果处理
可通过Process对象获取退出码和流信息:
int exitCode = process.exitValue(); // 获取退出码
InputStream stderr = process.getErrorStream(); // 获取错误流
OutputStream stdin = process.getOutputStream(); // 获取输入流
两种方式均可实现CMD命令执行,ProcessBuilder提供更灵活的配置选项,是更现代的实现方式。







