java 如何调用shell

调用Shell命令的方法
在Java中调用Shell命令可以通过Runtime或ProcessBuilder类实现。以下是具体实现方式:
使用Runtime.exec()
try {
Process process = Runtime.getRuntime().exec("ls -l");
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 (Exception e) {
e.printStackTrace();
}
使用ProcessBuilder
try {
ProcessBuilder builder = new ProcessBuilder("ls", "-l");
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 (Exception e) {
e.printStackTrace();
}
处理复杂命令
对于包含管道或重定向的复杂命令,可以直接调用Shell解释器:
Process process = new ProcessBuilder("/bin/sh", "-c", "ls -l | grep .txt").start();
注意事项
- 命令参数建议分开传递,避免注入风险
- 始终检查命令执行结果(通过
exitCode) - 及时处理输入输出流,避免进程阻塞
- 对于长时间运行的命令,可能需要超时控制







