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日

相关文章

  • 如何安装jdk及安装MyEclipse的图文教程

    下面是如何安装JDK及MyEclipse的图文教程。 安装JDK JDK(Java Development Kit)是开发和运行Java应用程序所必需的软件开发工具包。在安装MyEclipse之前,需要先安装JDK,以下是安装步骤: 第一步:下载JDK 首先,前往Oracle官方网站下载JDK安装文件,网址是 http://www.oracle.com/te…

    Java 2023年5月26日
    00
  • SpringBoot项目中的视图解析器问题(两种)

    在 Spring Boot 项目中,视图解析器是用于将逻辑视图名称解析为实际视图对象的组件。Spring Boot 支持两种类型的视图解析器:Thymeleaf 和 JSP。本文将介绍这两种视图解析器的使用方法和示例。 Thymeleaf 视图解析器 1. 什么是 Thymeleaf? Thymeleaf 是一种现代化的服务器端 Java 模板引擎,它可以处…

    Java 2023年5月18日
    00
  • 在Spring Boot中实现HTTP缓存的方法

    在Spring Boot中实现HTTP缓存的方法 在Web应用程序中,HTTP缓存是提高性能和减少网络流量的重要技术。在Spring Boot中,我们可以使用Spring框架提供的缓存机制来实现HTTP缓存。本文将介绍如何在Spring Boot中实现HTTP缓存的方法,并提供两个示例。 Spring Boot中的HTTP缓存 在Spring Boot中,我…

    Java 2023年5月15日
    00
  • Spring security如何重写Filter实现json登录

    下面是详细讲解“Spring security如何重写Filter实现json登录”的完整攻略。 什么是Spring Security? Spring Security 是一个基于 Spring 的安全框架,提供了完善的安全管理功能,能够有效地帮助我们实现安全的身份认证、授权、攻击防护等。在使用 Spring Security 的过程中,通常需要进行配置和扩…

    Java 2023年5月20日
    00
  • SpringBoot— SpringSecurity进行注销权限控制的配置方法

    下面是“SpringBoot— SpringSecurity进行注销权限控制的配置方法”的完整攻略。 什么是 SpringSecurity SpringSecurity 是 Spring 家族的强大安全认证和访问控制框架。它注重解决应用程序的安全性问题,而且提供了强大的认证与授权技术。SpringSecurity 支持 HTTP 和 HTTPS 协议,可…

    Java 2023年5月20日
    00
  • idea使用jclasslib插件查看字节码

    下面是使用jclasslib插件查看字节码的完整攻略。 简介 jclasslib是一款Java字节码编辑器,可以用于查看、分析Java类文件的字节码。除了常规的字节码指令和常量池信息外,它还能够查看方法、字段、注解、接口等相关信息。 同时,jclasslib还提供Intellij IDEA插件,让开发者能够直接在IDEA中使用jclasslib功能,进行更为…

    Java 2023年5月26日
    00
  • 解决spring data jpa saveAll() 保存过慢问题

    解决 Spring Data JPA saveAll() 保存过慢问题需要从以下两个方面入手: 批量操作 对于需要批量插入的数据,如果使用 JPA 的 saveAll() 方法,会对每个实体执行一次数据库操作,这样的效率会非常低下。因此,需要使用批量操作。在 Spring Data JPA 中,可以使用 JPA 提供的批量操作接口 Batch批量操作,方法为…

    Java 2023年5月20日
    00
  • 深入了解Java设计模式之职责链模式

    深入了解Java设计模式之职责链模式 职责链模式是一种行为型设计模式,它允许你将请求沿着处理者链进行发送,直到其中一个处理者处理该请求。职责链模式常用于请求的处理流程较为复杂,有多个处理器时的情况。 定义 职责链模式为请求创建了一个接受者对象的链,给予请求的类型,对请求的发送者和接收者进行解耦。职责链模式将请求的发送者和接收者分离开来,只要在链上得到处理,就…

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