java如何系统调用

Java 系统调用方法
Java 通过 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();
}
注意事项
- 路径处理:建议使用绝对路径或确保命令在系统环境变量中。
- 流处理:必须读取输出流和错误流,否则可能导致进程阻塞。
- 权限问题:需确保 Java 进程有权限执行目标命令。
- 跨平台兼容性:不同操作系统命令可能不同(如 Windows 用
dir,Linux 用ls)。
高级用法
通过 ProcessBuilder 可设置工作目录、环境变量等:
ProcessBuilder builder = new ProcessBuilder("myScript.sh");
builder.directory(new File("/path/to/working/dir"));
Map<String, String> env = builder.environment();
env.put("KEY", "VALUE");






