Java中如何执行多条shell/bat命令

yizhihongxing

Java中,可以通过调用系统命令的方式来执行shell/bat命令,可以用以下代码实现:

// 写法一:Runtime.getRuntime().exec()
Process process = Runtime.getRuntime().exec("command");
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
   System.out.println(line);
}

其中,command为待执行的命令,可以是单个命令,也可以是多个命令的组合。需要注意的是,如果待执行的命令是一个组合命令(例如多个shell/bat命令组合成的一个命令),则需要将这个命令放在一个脚本文件中,然后在Java代码中通过运行该脚本文件来执行多个命令。

示例一:执行shell命令并输出结果

假设我们有如下一个shell脚本test.sh,其中包含了两个命令:

echo "Hello World"
ls -l

我们可以在Java中通过以下代码来执行该脚本并输出结果:

Process process = Runtime.getRuntime().exec("sh test.sh");
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
    System.out.println(line);
}

执行结果如下:

Hello World
total 8
-rw-r--r--  1 user  staff   54 Jun  2 14:06 test.sh

示例二:执行bat命令并获取返回值

假设我们有如下一个bat脚本test.bat,其中包含了两个命令:

echo Hello World
dir

我们可以在Java中通过以下代码来执行该脚本并获取返回值:

// 写法二:ProcessBuilder.start()
ProcessBuilder processBuilder = new ProcessBuilder("cmd.exe", "/c", "test.bat");
processBuilder.redirectErrorStream(true);
Process process = processBuilder.start();
int exitCode = process.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
    System.out.println(line);
}
System.out.println("Exit code: " + exitCode);

执行结果如下:

Hello World
 Volume in drive C has no label.
 Volume Serial Number is B8E2-DE04

 Directory of C:\Users\user\Desktop

02/06/2021  03:16 PM    <DIR>          .
02/06/2021  03:16 PM    <DIR>          ..
02/06/2021  11:43 AM             1,423 sample.txt
02/06/2021  03:17 PM                25 test.bat
               2 File(s)          1,448 bytes
               2 Dir(s)  875,158,423,040 bytes free
Exit code: 0

注意:在使用Runtime.getRuntime().exec()执行多个命令组合时,需要将多个命令用分号(Windows)或者双竖线(Linux)隔开。例如:

Process process = Runtime.getRuntime().exec("command1; command2");
// 或者
Process process = Runtime.getRuntime().exec("command1 || command2");

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中如何执行多条shell/bat命令 - Python技术站

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

相关文章

  • Spring Date jpa 获取最新一条数据的实例代码

    接下来我将为您详细讲解如何在Spring Data JPA中获取最新一条数据的实例代码攻略。 1.使用@OrderBy实现按照指定字段排序,并取第一条数据 首先,我们可以使用@OrderBy注解对实体类中的某一个字段进行排序,并通过limit函数取得第一条记录。 @Entity @Table(name = "product") publi…

    Java 2023年5月20日
    00
  • SpringSecurity自定义成功失败处理器的示例代码

    以下是关于“SpringSecurity自定义成功失败处理器的示例代码”的完整攻略。 1. 添加依赖 首先,需要在项目的pom.xml文件中添加SpringSecurity的依赖,示例代码如下: <dependency> <groupId>org.springframework.security</groupId> &lt…

    Java 2023年5月20日
    00
  • 深入解析Java多态进阶学习

    深入解析Java多态进阶学习攻略 简介 Java是一门支持多态的编程语言。多态是OOP语言中非常重要的特征之一,也是使OOP能够支持继承的灵魂所在。本篇文章将深入讲解Java多态进阶学习的攻略,帮助读者更好地掌握多态的实现方法和使用技巧。 什么是多态 在Java中,多态是指同一个方法在不同的情况下具有不同的行为。通俗地讲,就是同一个方法可以被不同的对象调用,…

    Java 2023年5月26日
    00
  • SpringMVC拦截器配置及运行流程解析

    SpringMVC拦截器配置及运行流程解析 前言 在 SpringMVC 中,拦截器是非常重要的一个组件之一,它可以拦截来自浏览器的请求并进行相应的处理,如登录认证、日志记录、性能监控等。本文将详细阐述 SpringMVC 拦截器的配置及运行流程,并提供两条示例说明,帮助读者更好地理解和应用拦截器。 拦截器的配置 在 SpringMVC 中,拦截器的配置是通…

    Java 2023年5月16日
    00
  • java 格式化时间的示例代码

    下面是“java格式化时间的示例代码”的完整攻略。 格式化时间的方法 在Java中,可以使用SimpleDateFormat类中的format方法对时间进行格式化。 代码演示 下面给出一个示例,假设有如下需要格式化的时间: Date date = new Date(); 要把这个时间格式化为“yyyy-MM-dd HH:mm:ss”的形式,可以使用以下代码:…

    Java 2023年6月1日
    00
  • java文件读写操作实例详解

    下面是对“java文件读写操作实例详解”的完整攻略,包含以下几个部分: 1. 概述 文件读写操作是程序开发中经常用到的一项基础操作,Java提供了丰富的文件读写API,能够满足各种不同的需求。文件读写操作包括文件读取、文件写入、文件拷贝等。 2. 文件读取操作 Java提供了多种读取文件的方式,常用的方式包括IO流、NIO、FileReader等。下面以Fi…

    Java 2023年5月20日
    00
  • SpringBoot整合JPA框架实现过程讲解

    Spring Boot整合JPA框架实现过程讲解 在Spring Boot中,我们可以使用JPA框架来操作数据库。JPA是Java Persistence API的缩写,是一种Java ORM框架,可以将Java对象映射到关系型数据库中。本文将手把手教你如何在Spring Boot中整合JPA框架,包括添加依赖、配置数据源、创建实体类、创建Repositor…

    Java 2023年5月14日
    00
  • Java_Spring之Spring5 的新特性

    Java Spring之Spring5 的新特性 简介 Spring是一个著名的开源框架,它旨在简化企业级应用程序的开发。Spring5是Spring框架的最新版本,它引入了许多新的功能和改进,以使应用程序的开发和管理更加容易。本文将介绍一些Spring5的新特性,帮助您更好地了解Spring5的能力。 Spring5的新特性 1. 支持Java8 Spri…

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