当前位置: 首页 > 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.rkmt.cn/news/52563.html

相关文章:

  • java 读取文件linux文件
  • java 上传 linux
  • 获取抗菌-抗癌-抗炎-抗氧化序列
  • 黑马程序员SpringCloud微服务开发与实战- Docker-01
  • 11-17午夜盘思
  • 葫芦娃,要远离小心毒蛇和蝎子。
  • 屋顶望月
  • 团队管理与技术驱动
  • Mastercam2021软件界面
  • 用 Python 和 Tesseract OCR 识别复杂验证码
  • 用 Go 进行验证码识别
  • Spring AI Alibaba 项目源码学习(十)-Interceptor
  • 今日复盘
  • 13 个 pytest 宝藏插件推荐!(存存存)
  • java 1.8 linux
  • 事件循环其实很简单!
  • Upgrade Your Key Programming: New Style CG A22-3+1 Flip-4BTN Wire Remote for CGDI K2 (5pcs/lot)
  • 深入解析:使用 Triton 实现 Flash Attention2 - 让大模型训练飞起来
  • 题解:P8819 [CSP-S 2022] 星战
  • Java集合之【CopyOnWrite和Collections.synchronizedList()的区别】
  • 20232324 2024-2025-1 《网络与系统攻防技术》实验六实验报告
  • 复杂状态与数据流管理:分布式定时任务系统的设计
  • 【第6章 字符串】Python 字符串常用操作完全教程(含代码演示)
  • Sora 2 Cameo多角色上传+Remix二创功能API接入教程,史低0.08/条
  • 第28天(简单题中等题 二分查找)
  • 一次尝试,3个小时90元的主机游玩和F1电影
  • 静态路由的配置
  • 一段话 UOJ
  • CF1375G Tree Modification 题解
  • 《算 设》学