java运行shell脚本方法示例

Java运行shell脚本方法

Java可以通过ProcessBuilder,Runtime和Process三种方式运行操作系统的命令,包括执行shell脚本。下面将详细讲解如何使用Java运行shell脚本。

方法一:ProcessBuilder

ProcessBuilder可以创建一个进程来执行操作系统命令。可以通过设置ProcessBuilder的参数来执行shell脚本。

示例一:执行简单的shell脚本,如显示当前目录下的文件列表。

ProcessBuilder pb = new ProcessBuilder("ls", "-l");
pb.directory(new File("."));
Process process = pb.start();
InputStream inputStream = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
    System.out.println(line);
}
process.waitFor();

示例二:执行包含变量的shell脚本,如执行带参数的脚本。

String[] cmdarray = {"/bin/sh", "-c", "echo $1;echo $2"};
ProcessBuilder pb = new ProcessBuilder(cmdarray);
Map<String, String> env = pb.environment();
env.put("VAR1", "Hello");
env.put("VAR2", "World");
Process process = pb.start();
OutputStream outputStream = process.getOutputStream();
PrintWriter writer = new PrintWriter(new OutputStreamWriter(outputStream));
writer.println("$VAR1");
writer.flush();
writer.println("$VAR2");
writer.flush();
writer.close();
InputStream inputStream = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
    System.out.println(line);
}
process.waitFor();

方法二:Runtime

使用Runtime也可以运行shell脚本。

示例三:执行简单的shell脚本,如显示当前目录下的文件列表。

Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec("ls -l");
InputStream inputStream = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
    System.out.println(line);
}
process.waitFor();

示例四:执行带参数的shell脚本,如执行带变量的脚本。

Process process = runtime.exec(new String[] { "/bin/sh", "-c", "echo $VAR1;echo $VAR2" });
OutputStream outputStream = process.getOutputStream();
PrintWriter writer = new PrintWriter(new OutputStreamWriter(outputStream));
writer.println("VAR1=Hello");
writer.flush();
writer.println("VAR2=World");
writer.flush();
writer.close();
InputStream inputStream = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
    System.out.println(line);
}
process.waitFor();

方法三:Process

使用Process也可以运行shell脚本。

示例五:执行简单的shell脚本,如显示当前目录下的文件列表。

Process process = ProcessBuilder.start(new String[] { "/bin/sh", "-c", "ls -l" });
InputStream inputStream = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
    System.out.println(line);
}
process.waitFor();

示例六:执行带参数的shell脚本,如执行带变量的脚本。

Process process = ProcessBuilder.start(new String[] { "/bin/sh", "-c", "echo $VAR3" });
OutputStream outputStream = process.getOutputStream();
PrintWriter writer = new PrintWriter(new OutputStreamWriter(outputStream));
writer.println("VAR3=Hello World");
writer.flush();    
writer.close();
InputStream inputStream = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
    System.out.println(line);
}
process.waitFor();

以上就是Java运行shell脚本的完整攻略,包括ProcessBuilder、Runtime和Process三种方式的示例代码。您可以根据实际需求选择合适的方式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java运行shell脚本方法示例 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • Java面试题之HashMap 的 hash 方法原理是什么

    HashMap 的 hash 方法原理是什么 在了解HashMap的原理之前, 我们先看看hash散列表是怎么工作的, 他的原理是什么。 散列表的原理是将关键字通过散列函数映射到固定的位置上, 并对原始值进行处理, 最终得到的值就是我们所说的哈希值, 即在HashMap中所表现出来的值。在JDK1.7之前,HashMap的内部实现方式是数组 + 链表,数组的…

    Java 2023年5月26日
    00
  • 浅析Java的Hibernate框架中的继承关系设计

    浅析Java的Hibernate框架中的继承关系设计 什么是Hibernate? Hibernate是一个Java持久化框架,它可以将Java对象映射到关系数据库中。Hibernate提供了一个对象关系映射(ORM)的实现,通过使用这个框架,Java程序员就可以使用面向对象的方式来处理数据库操作。 继承关系设计在Hibernate中的应用 Hibernate…

    Java 2023年5月20日
    00
  • JDK14的新特性NullPointerExceptions的使用

    下面是详细讲解“JDK14的新特性NullPointerExceptions的使用”的完整攻略。 什么是NullPointerExceptions NullPointerExceptions 是 Java 程序中最常见的错误之一,它通常会在代码中使用空引用时发生。在 JDK14 中,对于这个问题已经进行了一些新的改进,我们可以更加方便地处理这个问题。 如何使…

    Java 2023年5月27日
    00
  • 快手挂小程序需要什么条件

    当你想在快手平台上挂载小程序时,需要以下条件: 1.小程序的认证 首先你必须有一个小程序,并且已经申请完成且审核通过了认证,可以进入微信公众平台 -> 开发 -> 认证管理 -> 小程序认证,完成认证。 2.具有快手小程序的开发权限 在进行快手小程序的挂载时,需要在快手官网申请成为快手小程序开发者,简单的流程可以是点击这个链接 快手小程序开…

    Java 2023年5月23日
    00
  • Java实现图片上传至FastDFS入门教程

    下面我将为你详细讲解Java实现图片上传至FastDFS入门教程的完整攻略。 什么是FastDFS? FastDFS是用于分布式文件存储的开源软件,支持文件上传、下载以及文件元数据的管理等操作。它采用了分布式的架构设计,可以实现高可用、高性能的文件存储。 准备工作 创建一个Maven项目。 在项目的pom.xml文件中添加FastDFS客户端的依赖。 &lt…

    Java 2023年6月15日
    00
  • SpringBoot项目鉴权的4种方式小结

    下面我们来详细讲解SpringBoot项目鉴权的4种方式,包括:JWT鉴权、Session鉴权、OAuth2鉴权以及SaaS鉴权。 1. JWT鉴权 JWT鉴权是目前最常用的鉴权方式之一,其具有轻量级、无状态、较高的安全性等特点。这里简单介绍一下JWT鉴权的原理: 在用户登录成功之后,服务器会将用户信息通过一定的加密方式生成一份Token,并将其返回给客户端…

    Java 2023年6月3日
    00
  • Spring注解实现Bean自动装配示例详解

    让我详细为您讲解一下 “Spring注解实现Bean自动装配示例详解”: 什么是Bean自动装配 在Spring中,Bean自动装配是指Spring容器在启动时,自动将需要相互依赖的实例进行自动匹配,并完成相应的依赖注入,从而简化开发工作。 在日常开发中,关于Bean自动装配,Spring提供了三种实现方式: 基于XML配置文件的方式DI 基于Java配置类…

    Java 2023年5月31日
    00
  • 详解如何在Spring Boot启动后执行指定代码

    在Spring Boot启动后执行指定代码可以使用Spring Boot提供的ApplicationRunner和CommandLineRunner接口。这两个接口都是在Spring Boot应用程序启动完成后运行的回调,并且被称为Spring Boot应用程序的启动回调。 ApplicationRunner接口 ApplicationRunner接口中包含…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部