在Java中执行命令行命令可以通过Runtime.exec()
或ProcessBuilder
实现。以下是两种方法的详细说明和示例代码:
1. 使用 Runtime.exec()
适用于简单场景,但需手动处理输入/输出流。
try {
// 执行命令(参数以数组形式传递,避免空格问题)
Process process = Runtime.getRuntime().exec(new String[]{
"ping", "-n", "3", "127.0.0.1"});
// 读取标准输出流
BufferedReader inputReader = new BufferedReader(
new InputStreamReader(process.getInputStream())
);
// 读取错误流
BufferedReader errorReader = new BufferedReader(
new InputStreamReader(process.getErrorStream())
);
// 打印输出和错误信息
String line;
while ((line = inputReader.readLine()) != null) {
System.out.println("输出: " + line);
}
while ((line = errorReader.readLine()) != null) {
System.out.println("错误: " + line);
}
// 等待命令执行完成并获取退出码
int exitCode = process.waitFor();
System.out.println("退出码: " + exitCode);
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
2. 使用 ProcessBuilder
更灵活,支持错误流合并、工作目录设置等。
try {
// 构建命令及参数
ProcessBuilder pb = new ProcessBuilder();
pb.command("ping", "-n", "3", "127.0.0.1");
// 合并标准输出和错误流(简化处理)
pb.redirectErrorStream(true);
// 设置工作目录(可选)
// pb.directory(new File("path/to/dir"));
// 启动进程
Process process = pb.start();
// 读取输出流
BufferedReader reader = <