java如何运行命令
运行系统命令的方法
在Java中运行系统命令可以通过Runtime或ProcessBuilder实现。以下是两种常见方法:
使用Runtime.exec()
try {
Process process = Runtime.getRuntime().exec("your_command");
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 (Exception e) {
e.printStackTrace();
}
使用ProcessBuilder
try {
ProcessBuilder builder = new ProcessBuilder("command", "arg1", "arg2");
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("Exited with code: " + exitCode);
} catch (Exception e) {
e.printStackTrace();
}
处理命令输出
命令执行后需要正确处理输入流、输出流和错误流,避免进程阻塞:
Process process = Runtime.getRuntime().exec("your_command");
StreamGobbler outputGobbler = new StreamGobbler(process.getInputStream(), "OUTPUT");
StreamGobbler errorGobbler = new StreamGobbler(process.getErrorStream(), "ERROR");
outputGobbler.start();
errorGobbler.start();
带参数的命令执行
当命令包含参数时,应该将命令和参数分开传递:
String[] cmd = {"ping", "-c", "3", "google.com"};
Process process = Runtime.getRuntime().exec(cmd);
工作目录设置
通过ProcessBuilder可以指定命令执行的工作目录:
ProcessBuilder builder = new ProcessBuilder("command");
builder.directory(new File("/path/to/working/directory"));
Process process = builder.start();
环境变量管理
可以添加或修改环境变量:
ProcessBuilder builder = new ProcessBuilder("command");
Map<String, String> env = builder.environment();
env.put("VAR_NAME", "value");
Process process = builder.start();
超时控制
为防止命令长时间运行,可以设置超时:

Process process = Runtime.getRuntime().exec("command");
if (!process.waitFor(30, TimeUnit.SECONDS)) {
process.destroy();
throw new TimeoutException();
}
注意事项
- 命令中的空格和特殊字符需要正确处理
- 流处理应该放在单独的线程中
- 考虑不同操作系统的命令差异
- 注意处理命令执行权限问题
- 重要操作应考虑安全性问题






