JAVA 流 写到linux,Java调用Linux下的shell命令并将结果以流的形式返回

该代码段展示了如何在Java中使用Runtime类执行Shell命令,如`ls -al /root`,并读取命令的输出。通过BufferedReader读取子进程的输入流和错误流,实现命令执行结果的捕获。
摘要由CSDN通过智能技术生成

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("

");

}

System.out.println(stringBuffer);

}

catch (IOException e)

{

e.printStackTrace();

}

}

}

publicclassShellExcuter{

privatestaticLoggerlogger= Logger.getLogger(ShellExcuter.class);

/**

* 跑linux命令

* @param cmd

* @param args

*/

publicstaticvoidrunShell(Stringcmd, String[] args) {

InputStreamin;

BufferedReaderbr;

OutputStreamout;

BufferedWriterbw;

try {

for (String arg : args) {

cmd = cmd +" "+arg;

}

//String[] cmds = new String[] {

//"/bin/sh",

//"-c",

//cmd };

logger.info(cmd);

Processprocess= Runtime.getRuntime().exec(cmd);

BufferedReaderbufferReader= newBufferedReader(newInputStreamReader(process.getInputStream()));

String temp = null;

while ((temp = bufferReader.readLine()) != null) {

logger.info(temp);

}

BufferedReaderbufferReader2= newBufferedReader(newInputStreamReader(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();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值