java 在linux执行命令_用Java去执行Linux命令,或者在Linux中运行脚本

背景

前一段时间项目需要在程序里面使用shell命令,就比较纠结,问我导师,导师给我说你可以去百度一下,Java是可以执行shell命令的。听到这个消息我就有点懵了,Java还可以执行Shell命令,有点强大啊!后来在网上搜了一些博文,看了看,还真的是可以的。

代码

public static String execShell(String shell) {

StringBuilder result = new StringBuilder();

Process process = null;

BufferedReader bufferedReaderInfo = null;

BufferedReader bufferedReaderError = null;

try {

// 执行shell命令,返回了一个进程

process = Runtime.getRuntime().exec(shell);

// 等待命令执行完成

process.waitFor();

// 获取结果,正常返回是第一个,错误返回是第二个,返回结果只能有一个,要么正常执行,要么执行错误

bufferedReaderInfo = new BufferedReader(new InputStreamReader(process.getInputStream()));

bufferedReaderError = new BufferedReader(new InputStreamReader(process.getErrorStream()));

String line;

// 将返回结果存到一个stringbuilder里面,因为StringBuilder是可扩展的,所以不用String

while (bufferedReaderInfo.readLine() != null || bufferedReaderError.readLine() != null) {

if (bufferedReaderInfo.readLine() != null) {

line = bufferedReaderInfo.readLine();

} else {

line = bufferedReaderError.readLine();

}

result.append(line + "\n");

}

} catch (Exception e) {

e.printStackTrace();

}finally {

// 释放资源

if (bufferedReaderError!=null){

try {

bufferedReaderError.close();

} catch (IOException e) {

e.printStackTrace();

}

}

if (bufferedReaderInfo!=null){

try {

bufferedReaderInfo.close();

} catch (IOException e) {

e.printStackTrace();

}

}

if (process!=null){

process.destroy();

}

}

return result.toString();

}

原理

Process 类提供了执行从进程输入、执行输出到进程、等待进程完成、检查进程的退出状态以及销毁进程的方法。在这里创建了一个Process类的对象,然后接收Runtime.exec(”“)的结果,是因为Runtime.exec("") 方法创建一个本机进程,并返回 Process 子类的一个实例。

所以这时候执行shell命令的就是这个Process子类的实例,然后阻塞,等待这个命令执行完成。执行完成之后获取这个进程的执行结果。最后把这个结果用BufferReader存起来放在StringBuilder里。最后返回出去。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值