java执行linux下软件自带的命令,java调用linux命令该如何实现?

在Linux里如何调用java相信大家都知道,但在java里调用Linux命令要如何编写小伙伴们知道吗?本篇文章小编就带大家了解了解。

例:public String executeLinuxCmd(String cmd)

{

System.out.println("got cmd job : " + cmd);

Runtime run = Runtime.getRuntime();

try

{

Process process = run.exec(cmd);

InputStream in = process.getInputStream();

BufferedReader bs = new BufferedReader(new InputStreamReader( in ));

// System.out.println("[check] now size \n"+bs.readLine());

StringBuffer out = new StringBuffer();

byte[] b = new byte[8192];

for (int n;

(n = in .read(b)) != -1;)

{

out.append(new String(b, 0, n));

}

System.out.println("job result [" + out.toString() + "]"); in .close();

// process.waitFor();

process.destroy();

return result;

}

catch (IOException e)

{

e.printStackTrace();

}

return null;

}

可以看到,在Java中我们几乎能够通过 Runtime 调用所有Linux命令,它的一般调用形式如下:

Runtime.getRuntime().exec(command)

但是有个问题,在这样执行时它是没有任何输出的,因为调用 Runtime.exec

方法将产生一个本地的进程,并返回一个Process子类的实例(注意:Runtime.getRuntime().exec(command)返回的是一个Process类的实例)这个实例可用于控制进程或取得进程的相关信息。

因为是调用的 Runtime.exec 方法所创建的子进程没有自己的终端或控制台,因此该子进程的标准IO(如stdin,stdou,stderr)都通过

Process.getOutputStream(),Process.getInputStream(), Process.getErrorStream()

方法重定向给它的父进程了。

所以用户就需要用这些stream来向子进程输入数据或获取子进程的输出,代码如下:try

{

String[] cmd = new String[]

{

/bin/sh”,

“-c”,

”ls“

};

Process ps = Runtime.getRuntime()

.exec(cmd);

BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));

StringBuffer sb = new StringBuffer();

String line;

while ((line = br.readLine()) != null)

{

sb.append(line)

.append(”\n”);

}

String result = sb.toString();

System.out.println(result);

}

catch (Exception e)

{

e.printStackTrace();

}

以上就是今天的全部内容,更多相关java常见问题及解决方法可以关注我们官网了解详情。

推荐阅读:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值