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

yizhihongxing

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日

相关文章

  • C++基于特征向量的KNN分类算法

    C++基于特征向量的KNN分类算法的完整攻略可以分为以下几个步骤: 1. 数据预处理 首先,需要对训练数据进行预处理,将其转换为特征向量的形式。对于图像等多维数据,可以使用特征提取的方法,如SIFT、HOG等来获得其特征向量;对于其他数据,可以根据具体情况选择适当的方法将其转换为特征向量。 2. 计算距离 KNN算法是一种基于距离的分类算法,因此在使用KNN…

    C 2023年5月22日
    00
  • 将Python代码嵌入C++程序进行编写的实例

    将Python代码嵌入C++程序可以实现在C++中调用Python库,充分利用Python库的功能,提高程序的灵活性和扩展性。下面是将Python代码嵌入C++程序进行编写的攻略。 准备工作 在进行Python代码嵌入C++编程之前,需要准备以下工作: 安装Python解释器和开发库; 安装boost.python库,这是一个C++库,可以方便地在C++编程…

    C 2023年5月30日
    00
  • C++JSON库CJsonObject详解(轻量简单好用)

    C++JSON库CJsonObject详解 什么是CJsonObject CJsonObject是一个C++ JSON的解析器,它是轻量级而简单易用的。 CJsonObject的特点 优秀的可移植性:用C++编写,依赖于标准库和STL 轻量级:只有两个文件(h和cpp),几乎无外部依赖 易于使用:丰富的API帮助你快速实现JSON的解析和生成 高效性:使用S…

    C 2023年5月23日
    00
  • C语言实现简易文本编译器

    C语言实现简易文本编译器 本攻略将介绍如何使用C语言实现一个简易文本编译器。编译器会将输入的文本文件转换为标准的HTML格式并输出到文件中。 准备工作 在开始之前,你需要安装一个C语言编译器,例如gcc或clang,并确保在你的系统上运行正常。你也需要掌握基本的C语言语法。 构建编译器 首先,我们需要将我们的编译器分为两个部分:词法分析器和语法分析器。 词法…

    C 2023年5月23日
    00
  • C++11 constexpr使用详解

    C++11 constexpr使用详解 什么是constexpr C++11引入了constexpr关键字,可在编译时求值的表达式必须使用constexpr标识。constexpr允许指定在编译时计算表达式的值,可以用于更高效的编译时计算。 constexpr函数 使用constexpr关键字定义的函数必须满足以下要求: 返回值类型和所有参数类型均应该是字面…

    C 2023年5月22日
    00
  • js如何获取object类型里的键值

    获取object类型里的键值可以使用JavaScript语言提供的两种方式:点运算符(.)和方括号([])。 点运算符(.) 点运算符是一种简单直接获取对象属性的方法,使用点运算符需要知道对象中属性的名称。例如,如果要获取下面这个对象中name属性的值,可以这样写: const obj = { name: "张三", age: 18 };…

    C 2023年5月22日
    00
  • C++嵌入式内存管理详情

    关于C++嵌入式内存管理,以下是完整的攻略: C++嵌入式内存管理概述 在嵌入式系统开发中,动态内存的使用是非常受限的,因此需要采用静态内存管理或者是内存池来代替动态内存分配。C++ 的运行时库也支持内存池技术,可以用于嵌入式系统开发中。 C++ 的内存池管理主要依赖于 new 和 delete 运算符来实现,通过重载 new 和 delete 运算符来达到…

    C 2023年5月23日
    00
  • C语言利用system调用系统命令行详情

    C语言可以利用system()函数来调用系统命令行。一般情况下,system()函数会启动一个新的进程来执行传入的命令,然后等待该进程结束后返回。在使用system()函数时,需要先包含头文件<stdlib.h>。 函数原型 int system(const char *command); 参数说明 command:需要执行的命令字符串,可以是系…

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