ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

java 调用linux命令

2026/8/17 5:23:11 拓冰建站 浏览量
java 调用linux命令

在 Linux 系统中,Java 可以通过 ProcessBuilderRuntime 类来调用 Linux 命令。以下是一些常见方式,帮助你从 Java 中调用 Linux 命令:

? 1. 使用 ProcessBuilder 调用 Linux 命令

这是最常见的方式,适用于大多数 Linux 发行版。

import java.io.IOException;public class JavaCallLinux {public static void main(String[] args) {try {// 定义要执行的命令String command =  + #引号 + ls -l + #引号 + ; // 示例命令// 创建 ProcessBuilder 实例ProcessBuilder pb = new ProcessBuilder(command);pb.redirectErrorStream(true); // 将错误输出重定向到标准输出// 执行命令Process process = pb.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( + #引号 + 命令执行完成,退出码:  + #引号 +  + exitCode);} catch (IOException | InterruptedException e) {e.printStackTrace();}}
}

? 2. 使用 Runtime 类调用 Linux 命令

适用于简单场景,但不推荐用于复杂命令。

public class JavaCallLinux {public static void main(String[] args) {try {// 定义要执行的命令String command =  + #引号 + ls -l + #引号 + ;// 调用命令Process process = Runtime.getRuntime().exec(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( + #引号 + 命令执行完成,退出码:  + #引号 +  + exitCode);} catch (IOException | InterruptedException e) {e.printStackTrace();}}
}

? 3. 调用 Linux 命令并传递参数

你可以传递参数给 Linux 命令,例如:

String command =  + #引号 + ls -l /home/user + #引号 + ;
Process process = Runtime.getRuntime().exec(command);

? 4. 调用 Linux 命令并捕获错误输出

Process process = Runtime.getRuntime().exec( + #引号 + ls /nonexistentdir + #引号 + );
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
String line;
while ((line = reader.readLine()) != null) {System.out.println( + #引号 + 错误:  + #引号 +  + line);
}

? 5. 调用 Linux 命令并等待完成

Process process = Runtime.getRuntime().exec( + #引号 + sleep 5 + #引号 + );
process.waitFor(); // 等待命令执行完成

? 6. 传递环境变量

ProcessBuilder pb = new ProcessBuilder( + #引号 + bash + #引号 + ,  + #引号 + -c + #引号 + ,  + #引号 + echo $JAVA_HOME + #引号 + );
pb.environment().put( + #引号 + JAVA_HOME + #引号 + ,  + #引号 + /usr/lib/jvm/java-11-openjdk + #引号 + );
Process process = pb.start();

? 7. 使用 ProcessBuilder 传递多个参数

ProcessBuilder pb = new ProcessBuilder( + #引号 + ls + #引号 + ,  + #引号 + -l + #引号 + ,  + #引号 + /home + #引号 + );
pb.redirectErrorStream(true);
Process process = pb.start();

? 8. 使用 ProcessBuilderredirectErrorStream 一起使用

ProcessBuilder pb = new ProcessBuilder( + #引号 + grep + #引号 + ,  + #引号 + error + #引号 + ,  + #引号 + /var/log/syslog + #引号 + );
pb.redirectErrorStream(true);
Process process = pb.start();

? 9. 使用 ProcessBuilderredirectErrorStream 一起使用并读取输出

ProcessBuilder pb = new ProcessBuilder( + #引号 + grep + #引号 + ,  + #引号 + error + #引号 + ,  + #引号 + /var/log/syslog + #引号 + );
pb.redirectErrorStream(true);
Process process = pb.start();BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {System.out.println(line);
}

? 10. 使用 ProcessBuilderredirectErrorStream 一起使用并捕获错误

ProcessBuilder pb = new ProcessBuilder( + #引号 + grep + #引号 + ,  + #引号 + error + #引号 + ,  + #引号 + /var/log/syslog + #引号 + );
pb.redirectErrorStream(true);
Process process = pb.start();BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {System.out.println(line);
}BufferedReader errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
String errorLine;
while ((errorLine = errorReader.readLine()) != null) {System.out.println( + #引号 + 错误:  + #引号 +  + errorLine);
}

? 总结

方法 适用场景 优点 缺点ProcessBuilder 复杂命令、需要参数、错误处理 灵活、可定制 需要较多代码Runtime.exec() 简单命令 简单易用 无错误处理机制Process.waitFor() 等待命令完成 无需额外代码 需要手动等待

如需进一步帮助,例如调用特定命令、处理输出、错误处理等,请随时告诉我!

文章转自:[《英雄联盟》攻略秘籍:轻松上分必备技巧解析 ] (https://www.52mwyd.com/news/10142.html)

作者:游戏攻略,转载请注明原文链接:https://www.52mwyd.com/