Java调用Linux下的shell命令并将结果以流的形式返回
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main
{
public static void main(String[] args)
{
//得到Java进程的相关Runtime运行对象
Runtime runtime = Runtime.getRuntime();
try
{
//利用exec()方法执行shell 命令 ls -al /root ,并且返回一个Process对象 也就是子进程
//ps:这里都以最简单的shell命令举例。
Process process = runtime.exec("ls -al /root");
BufferedReader bufferReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
StringBuffer stringBuffer = new StringBuffer();
String temp = null;
while ((temp = bufferReader.readLine()) != null)
{
stringBuffer.append(temp);
stringBuffer.append("\n");
}
System.out.println(stringBuffer);
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
public class ShellExcuter {
private static Logger logger = Logger.getLogger(ShellExcuter.class);
/**
* 跑linux命令
* @param cmd
* @param args
*/
public static void runShell(String cmd, String[] args) {
InputStream in;
BufferedReader br;
OutputStream out;
BufferedWriter bw;
try {
for (String arg : args) {
cmd = cmd +" "+arg;
}
// String[] cmds = new String[] {
// "/bin/sh",
// "-c",
// cmd };
logger.info(cmd);
Process process = Runtime.getRuntime().exec(cmd);
BufferedReader bufferReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String temp = null;
while ((temp = bufferReader.readLine()) != null) {
logger.info(temp);
}
BufferedReader bufferReader2 = new BufferedReader(new InputStreamReader(process.getErrorStream()));
while ((temp = bufferReader.readLine()) != null) {
logger.info(temp);
}
bufferReader.close();
bufferReader2.close();
process.waitFor();
process.destroy();
} catch (Throwable e) {
logger.error("执行linux命令出错:" + e.getMessage());
e.printStackTrace();
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律