前言: Java调用shell脚本的方法是什么?IT培训网小编来告诉大家。 1.概述 在本教程中,我们将说明在Java代码中执行 shell 命
Java调用shell脚本的方法是什么?IT培训网小编来告诉大家。
在本教程中,我们将说明在Java代码中执行 shell 命令的两种方式。
第一种是使用Runtime类并调用它的exec方法。
第二种更可定制的方式是创建和使用ProcessBuilder实例。
在我们要创建一个执行我们的 shell 命令的新进程之前,我们需要首先确定我们的JVM正在运行的操作系统。
这是因为,在Windows上,我们需要将命令作为cmd.exe shell 的参数运行,而在所有其他操作系统上,我们可以发出标准 shell,称为sh:
boolean isWindows = System.getProperty("os.name")
.toLowerCase().startsWith("windows");
此外 ,我们需要一种方法来挂钩我们流程的输入和输出流。
至少必须消耗输出- 否则我们的进程不会成功返回,而是会挂起。
让我们实现一个名为StreamGobbler的常用类,它使用InputStream:
private static class StreamGobbler implements Runnable {
private InputStream inputStream;
private Consumer<String> consumer;
public StreamGobbler(InputStream inputStream, Consumer<String> consumer) {
this.inputStream = inputStream;
this.consumer = consumer;
}
@Override
public void run() {
new BufferedReader(new InputStreamReader(inputStream)).lines()
.forEach(consumer);
}
}
注意:这个类实现了Runnable接口,这意味着它可以被任何Executor 执行。
对Runtime.exec()的方法调用是一种简单的、尚未可定制的方法来生成新的子进程。
在以下示例中,我们将请求用户主目录的目录列表并将其打印到控制台:
String homeDirectory = System.getProperty("user.home");
Process process;
if (isWindows) {
process = Runtime.getRuntime()
.exec(String.format("cmd.exe /c dir %s", homeDirectory));
} else {
process = Runtime.getRuntime()
.exec(String.format("sh -c ls %s", homeDirectory));
}
StreamGobbler streamGobbler =
new StreamGobbler(process.getInputStream(), System.out::println);
Executors.newSingleThreadExecutor().submit(streamGobbler);
int exitCode = process.waitFor();
assert exitCode == 0;
对于计算问题的第二个实现,我们将使用ProcessBuilder。这比运行时方法更受欢迎,因为我们能够自定义一些细节。
例如,我们能够:
使用builder.directory()更改我们的 shell 命令正在运行的工作目录
使用builder.environment()将自定义键值映射设置为环境
将输入和输出流重定向到自定义替换
使用builder.inheritIO()将它们都继承到当前JVM进程的流中
ProcessBuilder builder = new ProcessBuilder();
if (isWindows) {
builder.command("cmd.exe", "/c", "dir");
} else {
builder.command("sh", "-c", "ls");
}
builder.directory(new File(System.getProperty("user.home")));
Process process = builder.start();
StreamGobbler streamGobbler =
new StreamGobbler(process.getInputStream(), System.out::println);
Executors.newSingleThreadExecutor().submit(streamGobbler);
int exitCode = process.waitFor();
assert exitCode == 0;
通过上述介绍,相信大家对Java调用shell脚本的方法已经有所了解,大家如果想了解更多相关知识,可以关注一下IT培训网的Java在线学习,里面的课程内容细致全面,很适合没有基础的小伙伴学习,希望对大家能够有所帮助。
文章出自:http://qh.itpxw.cn/peixun/software/2022123791.html
文章标题:Java调用shell脚本的方法
免责声明:本站文章均由入驻起航学习网的会员所发或者网络转载,所述观点仅代表作者本人,不代表起航学习网立场。如有侵权或者其他问题,请联系举报,必删。侵权投诉
IT培训网 访问该机构站点 报名留言 加为好友 用户等级:注册会员
用户级别:10
机构名称:IT培训网
联 系 人:罗老师
联系电话:13783581536
联系手机:13783581536
在线客服:
在 线 QQ:
电子邮件:
网站域名:http://www.itpxw.cn
注册时间:2016-07-18 11:07
最后登录:2024-02-20 13:02
Java定义方法的格式是什么?IT培训网小编来告诉大家。所谓方法...
大家在Java教程中会学到关于Java消息推送的知识,那么,Java消息...
常用的Java日期格式转换有哪些?IT培训网小编来告诉大家。 1...
Java创建对象数组的方法是什么?IT培训网小编来告诉大家。Ja...