java如何调用外部
调用外部程序的方法
在Java中调用外部程序可以通过Runtime类或ProcessBuilder类实现。以下是具体实现方式:
使用Runtime类
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec("command");
使用ProcessBuilder类
ProcessBuilder processBuilder = new ProcessBuilder("command", "arg1", "arg2");
Process process = processBuilder.start();
处理输入输出流
调用外部程序后,通常需要处理其输入、输出和错误流:
InputStream inputStream = process.getInputStream();
InputStream errorStream = process.getErrorStream();
OutputStream outputStream = process.getOutputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
等待进程完成
使用waitFor()方法可以等待外部程序执行完成:
int exitCode = process.waitFor();
if (exitCode == 0) {
System.out.println("执行成功");
} else {
System.out.println("执行失败");
}
传递环境变量
通过ProcessBuilder可以设置环境变量:
ProcessBuilder processBuilder = new ProcessBuilder("command");
Map<String, String> environment = processBuilder.environment();
environment.put("KEY", "VALUE");
Process process = processBuilder.start();
处理带空格的命令
对于包含空格的命令或参数,需要分开传递:
ProcessBuilder processBuilder = new ProcessBuilder("cmd", "/c", "dir", "C:\\Program Files");
执行Shell脚本
在Unix/Linux系统下执行Shell脚本:
ProcessBuilder processBuilder = new ProcessBuilder("/bin/sh", "script.sh");
processBuilder.directory(new File("/path/to/script"));
Process process = processBuilder.start();
超时控制
为防止进程长时间阻塞,可以设置超时:

if (!process.waitFor(30, TimeUnit.SECONDS)) {
process.destroy();
throw new RuntimeException("执行超时");
}
以上方法涵盖了Java调用外部程序的主要场景,根据具体需求选择合适的方式即可。






