起航学习网

- 让每个人都能学到最前沿新知识、新技能!
起航学习网
当前位置: 起航学习网 > 短期培训 > 编程语言 > Java调用shell脚本的方法

Java调用shell脚本的方法

时间:2022-08-14 14:44:00来源:零基础学Java 作者:Java学习网 已有: 名学员访问该课程

  快捷搜索:java调用shell脚本

前言: Java调用shell脚本的方法是什么?IT培训网小编来告诉大家。 1.概述 在本教程中,我们将说明在Java代码中执行 shell 命

Java调用shell脚本的方法是什么?IT培训网小编来告诉大家。

1.概述

在本教程中,我们将说明在Java代码中执行 shell 命令的两种方式。

第一种是使用Runtime类并调用它的exec方法。

第二种更可定制的方式是创建和使用ProcessBuilder实例。

2.操作系统依赖

在我们要创建一个执行我们的 shell 命令的新进程之前,我们需要首先确定我们的JVM正在运行的操作系统。

这是因为,在Windows上,我们需要将命令作为cmd.exe shell 的参数运行,而在所有其他操作系统上,我们可以发出标准 shell,称为sh:

boolean isWindows = System.getProperty("os.name")
  .toLowerCase().startsWith("windows");

3.输入输出

此外 ,我们需要一种方法来挂钩我们流程的输入和输出流。

至少必须消耗输出- 否则我们的进程不会成功返回,而是会挂起。

让我们实现一个名为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 执行。

4.运行时.exec()

对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;

5.流程构建器

对于计算问题的第二个实现,我们将使用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脚本的方法



免责声明:本站文章均由入驻起航学习网的会员所发或者网络转载,所述观点仅代表作者本人,不代表起航学习网立场。如有侵权或者其他问题,请联系举报,必删。侵权投诉

你也许会喜欢如下的文章?
(责任编辑:深圳学历教育网)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
培训学校
IT培训网 访问该机构站点 报名留言 加为好友 用户等级:注册会员 用户级别:10 机构名称:IT培训网 联 系 人:罗老师 联系电话:13783581536 联系手机:13783581536 在线客服:起航学习网客服 在 线 QQ:起航学习网客服 电子邮件: 网站域名:http://www.itpxw.cn 注册时间:2016-07-18 11:07 最后登录:2024-02-20 13:02
推荐内容