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中File类的构造函数及其方法

    当我们在Java程序中需要处理文件相关的操作时,File类就会变得非常重要。它是Java中处理文件和目录的核心类,提供了很多有用的方法和构造函数。下面我们就来详细讲解一下Java中File类的构造函数及其方法。 File类的构造函数 File类的构造函数用于创建一个File对象,它可以接受文件名或者文件路径作为参数,也可以接受一个代表目录的File对象作为参…

    Java 2023年5月26日
    00
  • springmvc项目使用@Valid+BindingResult遇到的问题

    针对“springmvc项目使用@Valid+BindingResult遇到的问题”,我提供以下完整攻略: 1. 理解问题 经过实践和研究,我们发现当使用@Valid和BindingResult配合进行表单数据校验时,有时会遇到一些问题。 问题的根本原因在于BindingResult的处理方式与我们期望的不太一样,它不会使@Valid注解的校验失败,而是将校…

    Java 2023年5月20日
    00
  • apache .htaccess文件详解和配置技巧总结

    下面就来详细讲解一下“apache .htaccess文件详解和配置技巧总结”的完整攻略。 一、什么是 .htaccess 文件? 在 Apache 服务器上,.htaccess 文件是一个可以被用来改变服务器配置的配置文件。它可以被放在网站的根目录或者任何需要特殊配置的目录中,而不需要修改服务器的主配置文件(httpd.conf)。 二、.htaccess…

    Java 2023年6月15日
    00
  • 5个主流的Java开源IDE工具详解

    5个主流的Java开源IDE工具详解 在Java开发领域里,开发者们通常都会使用一些集成开发环境(Integrated Development Environment,IDE)工具来写代码,测试程序和debug。这里我们来介绍一下主流的Java开源IDE工具。 1. Eclipse Eclipse是一个由IBM开发的开源项目,它旨在为Java应用提供一个全面…

    Java 2023年5月23日
    00
  • Java线程池详细解读

    Java线程池详细解读 什么是线程池? 线程池是一种用于多线程管理的机制,它可以有效管理将要执行的任务,减轻了创建和销毁线程的负担。通过复用现有线程,避免了大量线程创建和销毁过程中的开销,从而提高了应用程序的性能和可伸缩性。 线程池的优势 线程池的优势主要体现在以下几个方面: 更好的利用 CPU 资源和减少上下文切换的时间开销。 可以根据需要创建和回收线程,…

    Java 2023年5月26日
    00
  • Javafx简单实现【我的电脑资源管理器】效果

    下面是详细讲解“Javafx简单实现【我的电脑资源管理器】效果”的完整攻略: 1. 准备工作 在进行Javafx开发前,我们需要先安装好开发所需的环境,包括JDK和IDE。这里我们选择JDK1.8和Intellij IDEA作为开发环境。具体安装方法这里不作过多说明,可以参考官方文档进行安装。 2. 建立项目 使用Intellij IDEA创建一个新的Jav…

    Java 2023年5月24日
    00
  • 详解Java内部类与对象的打印概念和流程

    下面我将对“详解Java内部类与对象的打印概念和流程”进行详细讲解。 Java内部类的概念 在Java中,内部类定义在另一个类的内部并与其它类成员变量的作用域相同。内部类提供了一种更加合理、封装的方式来组织和分离代码,它让重要的代码组合在更小的、更容易维护的单元中。内部类的创建和使用方式与接口和类非常相似,通常在外部类中创建内部类的对象。 内部类可以分为四种…

    Java 2023年5月26日
    00
  • 使用maven整合Spring+SpringMVC+Mybatis框架详细步骤(图文)

    以下是关于“使用maven整合Spring+SpringMVC+Mybatis框架详细步骤(图文)”的完整攻略,其中包含两个示例。 使用maven整合Spring+SpringMVC+Mybatis框架详细步骤(图文) 在本文中,我们将讲解如何使用maven整合Spring+SpringMVC+Mybatis框架。这是一种常用的Web开发框架,可以帮助我们快…

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