当前位置: 首页 > news >正文

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/

http://www.jsqmd.com/news/43123/

相关文章:

  • 西门子v4.0问题
  • java 读取文件linux文件
  • java 读取linux 文件
  • java 上传 linux
  • 从接雨水问题看双指针与递归:藏在“收缩”里的分治智慧
  • Day22综合案例一:
  • 获取抗菌-抗癌-抗炎-抗氧化序列
  • LDO(线性稳压器)-理论篇
  • Tauri2.9+Vue3电脑端OS系统|vite7+tauri2+arcoDesign桌面os后台模板
  • 黑马程序员SpringCloud微服务开发与实战- Docker-01
  • 11-17午夜盘思
  • 葫芦娃,要远离小心毒蛇和蝎子。
  • 6.S081 操作系统 Lab1
  • Coco AI 参选 Gitee 2025 最受欢迎开源软件!您的每一票,都是对中国开源的硬核支持
  • 题解:P14002 [eJOI 2025] Navigation
  • 多媒体与可视化:WebAssembly集成与实时视频贴图
  • 第三章作业 动态规划
  • Java Room与SQLite如何交互
  • 11月17日日记
  • 第三十一天
  • wsl 常用命令
  • AI模型的github——ModelScope.co和Hugging Face.cn
  • 屋顶望月
  • 逆向基础--C++ 运算符 (05)
  • 团队管理与技术驱动
  • 日总结 27
  • 随缘打赏
  • java linux 中文
  • java linux jdk
  • 用 Go 进行验证码识别