java调用外部程序的方法及代码演示

Java调用外部程序是一种常见场景,我们可以使用Java语言来方便地与外部程序进行交互。在本篇文章中,我将为大家详细讲解Java调用外部程序的方法及代码演示。

一、使用Runtime类调用外部程序

1.1 Runtime.getRuntime().exec()方法

Java提供了Runtime类来处理与系统进程的交互,我们可以使用该类的exec()方法来启动一个新的子进程,并执行指定的命令。以下是示例代码:

Process p = Runtime.getRuntime().exec("cmd /c dir");

上述代码使用Runtime类调用Windows系统的cmd命令,并在命令后面加上'/c'参数执行'dir'命令,输出当前目录下的文件及文件夹列表。

1.2 获取进程输出结果

一般而言,调用外部命令都需要获得其输出结果。我们可以使用Process类的getInputStream()方法获取子进程的标准输出流,并使用BufferedReader类来读取输出结果。以下是示例代码:

Process p = Runtime.getRuntime().exec("cmd /c dir");
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while ((line = br.readLine()) != null) {
    System.out.println(line);
}

上述代码执行完子进程后,将输出结果逐行读取并打印出来。

二、使用ProcessBuilder类调用外部程序

ProcessBuilder类提供了更为灵活且易于维护的调用外部程序方法。我们可以使用该类的构造器,传入外部程序参数即可启动新的进程。以下是示例代码:

ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "dir");
Process p = pb.start();

上述代码使用ProcessBuilder类调用Windows系统的cmd命令,并在命令后面加上'/c'参数执行'dir'命令。

2.1 设置工作目录

我们可以使用ProcessBuilder类的directory()方法来设置工作目录,这样可以保证在调用外部程序时,指定的命令可以在指定的目录下执行。以下是示例代码:

ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "dir");
pb.directory(new File("D:/")); // 将工作目录设置为D盘根目录
Process p = pb.start();

上述代码将工作目录设置为D盘的根目录。

2.2 执行命令后等待命令执行完成

我们可以使用Process类的waitFor()方法来等待外部命令执行完成。以下是示例代码:

ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "dir");
Process p = pb.start();
int retCode = p.waitFor(); // 等待命令执行完成

上述代码执行外部命令后,等待命令执行完成,返回值表示命令执行的结果码。如果返回值为0,则表示命令执行成功。

三、示例代码演示

接下来,我们将演示使用Java调用外部程序的完整代码示例。

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;

public class ProcessDemo {

    public static void main(String[] args) throws IOException, InterruptedException {
        // 使用Runtime类调用外部程序
        System.out.println("---------------1.使用Runtime类调用外部程序---------------");
        // 设置cmd命令,cmd /c代表执行完该命令后关闭cmd窗口
        Process p = Runtime.getRuntime().exec("cmd /c dir");
        BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line;
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }
        System.out.println("----------------------------------------------------------");

        // 使用ProcessBuilder类调用外部程序
        System.out.println("---------------2.使用ProcessBuilder类调用外部程序---------------");
        ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "dir");
        pb.directory(new File("D:/"));
        Process p2 = pb.start();
        int retCode = p2.waitFor();
        if (retCode == 0) {
            System.out.println("命令执行成功");
        } else {
            System.out.println("命令执行失败");
        }
        System.out.println("----------------------------------------------------------");
    }

}

上述代码分别使用Runtime类和ProcessBuilder类调用外部程序,执行完命令后并且输出命令执行的结果。

这就是Java调用外部程序的方法及代码演示的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java调用外部程序的方法及代码演示 - Python技术站

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

相关文章

  • Windows OpenGL ES 图像 GPUImageAmatorkaFilter

    零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录  >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录  >> OpenGL ES 特效 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录  >> OpenGL ES …

    C语言 2023年4月18日
    00
  • C++11之std::future对象的使用以及说明

    C++11中的std::future对象是一种异步编程的工具,可以让我们更加方便地进行异步操作。在本文中,我们将详细讲解如何使用std::future对象以及它的几个重要特点。 什么是std::future对象? std::future是C++11中的异步编程工具之一,是表示异步操作结果的一个类模板。当我们进行异步操作时,可以使用std::future来获取…

    C 2023年5月22日
    00
  • Python使用LRU缓存策略进行缓存的方法步骤

    Python使用LRU缓存策略进行缓存是比较常见的一种优化手段。下面是LRU缓存的实现步骤: 1.导入lru_cache库 使用LRU缓存需要导入lru_cache库。在Python 3中,lru_cache库已经成为了标准库,不需要安装。 2.定义函数并添加缓存装饰器 在定义函数时,需要添加缓存装饰器@lru_cache。这个装饰器带有一个maxsize参…

    C 2023年5月23日
    00
  • go GCM gin中间件的加密解密文件流处理

    GCM是一种加密方式,它能够提供认证和加密的安全性,并且应用范围广泛。在Go语言中,我们可以通过gin框架中的中间件来实现GCM加密解密文件流处理。 下面我们就来一步步讲解如何实现。 引入必要的包 在Go语言中,实现GCM加密解密流处理,我们需要使用到以下包: import ( "crypto/aes" "crypto/ciph…

    C 2023年5月23日
    00
  • win10系统自带的计算器C和CE功能有什么区别?

    当我们使用win10系统自带的计算器时,会发现有两个按钮分别标注为“C”和“CE”,这两个按钮的作用都是清空计算器上的内容。但是,它们之间存在着一些区别。 首先,C是Clear的缩写,即清除所有计算器上的数字,包括之前的计算结果。而CE是Clear Entry的缩写,即只清除计算器上当前输入栏中的数字,之前的计算结果不会被修改或影响。 接下来,我将用两条示例…

    C 2023年5月22日
    00
  • 常用C/C++预处理指令详解

    常用C/C++预处理指令详解 什么是预处理指令? C/C++语言中,预处理指令是用于在实际编译前对代码进行预处理的指令。预处理器会在实际编译之前对指令进行展开、替换和操作。 常用预处理指令 #define #define指令是预处理中定义宏的指令,通过这个指令可以方便地定义常量、函数和表达式等。语法为#define 宏名 宏值,其中宏名为任意字母、数字、下划…

    C 2023年5月23日
    00
  • 浅析c语言中的内存

    浅析C语言中的内存 什么是内存 内存是一种存储数据的硬件设备,是计算机中最基本的组成部分之一。内存根据尺寸的不同,又分成不同的级别,从而形成了”字节(Byte)”、”千字节(KB)”、”兆字节(MB)”、”吉字节(GB)”等不同的规模。在C语言中,内存被划分为若干个地址,每个地址可以存储一个字节(Byte)的数据。 C语言中内存的使用 在C语言中,我们可以通…

    C 2023年5月24日
    00
  • C语言函数返回指针

    C语言中的函数可以返回不同的数据类型,包括指针类型。函数返回指针类型可以让我们更加灵活地操作内存,提高代码的重用性和可维护性。 在函数定义的时候,我们需要用指针类型作为返回值类型,并在函数体中返回指向目标数据的指针。以下是函数返回指针的基本语法: int* myFunction() { int* ptr = malloc(sizeof(int)); *ptr…

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