java如何运行cmd
运行CMD命令的方法
在Java中运行CMD命令可以通过Runtime类或ProcessBuilder类实现。以下是两种常见的方法:
使用Runtime.exec()
Runtime.getRuntime().exec()是传统的方式,直接执行命令字符串。
try {
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);
}
process.waitFor();
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
cmd /c表示执行完命令后关闭CMD窗口。- 通过
InputStream读取命令输出结果。 waitFor()等待命令执行完成。
使用ProcessBuilder
ProcessBuilder提供了更灵活的控制,如设置工作目录、环境变量等。
try {
ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", "ping 127.0.0.1");
builder.redirectErrorStream(true); // 合并错误流和输出流
Process process = builder.start();
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("Exit code: " + exitCode);
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
redirectErrorStream(true)将错误流合并到输出流,便于统一处理。- 可以设置
directory()指定命令执行的工作目录。
处理复杂命令
如果需要执行多条命令或包含特殊字符(如空格、引号),需注意转义:
String[] commands = {"cmd.exe", "/c", "echo Hello && echo World"};
Process process = new ProcessBuilder(commands).start();
注意事项
- 执行长时间运行的命令时,建议异步处理或超时控制,避免阻塞主线程。
- 某些命令可能需要管理员权限,此时需以管理员身份运行Java程序。
- 跨平台时注意命令差异(如Linux使用
/bin/sh而非cmd.exe)。







