在 Java 中执行 CMD 命令有多种方式,下面我将介绍三种常用的方法,并为每种方法提供示例代码和可能的依赖项。
这是最简单的方法之一,但需要小心处理命令和输出,以避免潜在的安全问题。
导入依赖(无需第三方库):
无需任何额外依赖。
示例代码:
public class CmdExecutionExample {
public static void main(String[] args) {
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();
process.destroy();
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
ProcessBuilder
提供了更多的控制权和配置选项,使得执行命令更加灵活。
导入依赖(无需第三方库):
无需任何额外依赖。
示例代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class ProcessBuilderExample {
public static void main(String[] args) {
try {
// 构建命令
ProcessBuilder processBuilder = new ProcessBuilder("cmd", "/c", "dir");
// 重定向输出
processBuilder.redirectErrorStream(true);
// 启动进程
Process process = processBuilder.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();
}
}
}
Apache Commons Exec 库为执行外部命令提供了更高级的抽象,使得处理输入、输出和错误更加简单。
导入依赖(Maven):
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-exec</artifactId>
<version>1.3</version>
</dependency>
示例代码:
import org.apache.commons.exec.CommandLine;
import org.apache.commons.exec.DefaultExecutor;
import org.apache.commons.exec.ExecuteException;
import org.apache.commons.exec.ExecuteResultHandler;
import org.apache.commons.exec.ExecuteWatchdog;
import java.io.IOException;
public class CommonsExecExample {
public static void main(String[] args) {
try {
// 构建命令行
CommandLine cmdLine = CommandLine.parse("cmd /c dir");
// 配置执行器
DefaultExecutor executor = new DefaultExecutor();
executor.setExitValue(0); // 设置期望的退出值
// 配置超时
ExecuteWatchdog watchdog = new ExecuteWatchdog(60000); // 60秒超时
executor.setWatchdog(watchdog);
// 异步执行命令
executor.execute(cmdLine, new ExecuteResultHandler() {
public void onProcessComplete(int exitValue) {
System.out.println("Exit Code: " + exitValue);
}
public void onProcessFailed(ExecuteException e) {
e.printStackTrace();
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
}
通过这些方法,你可以在 Java 中执行 CMD 命令,并处理其输出和错误。选择方法取决于你的需求和项目的要求,但请务必小心处理外部命令以确保安全性。