当前位置: 首页 > 图灵资讯 > 技术篇> Java调用cmd交互式执行命令

Java调用cmd交互式执行命令

来源:图灵教育
时间:2023-11-09 17:31:49

Java调用cmd交互式执行命令详细介绍

在Java开发中,有时我们需要调用操作系统的命令来执行特定的命令,如执行可执行文件或执行一些系统管理命令。本文将介绍如何在Java中调用cmd交互式执行命令。

流程

以下是整个过程的步骤概述:

  journey    title Java调用cmd交互执行命令流程        section 准备工作      开发者 ->> 小白: 了解需求    section 执行命令      开发者 ->> 小白: 创建ProcessBuilder对象      开发者 ->> 小白: 配置命令和参数      开发者 ->> 小白: 执行启动过程的命令      开发者 ->> 小白: 获取命令执行结果    section 输出结果      开发者 ->> 小白: 获取命令执行结果流      开发者 ->> 小白: 阅读命令执行结果      开发者 ->> 小白: 输出结果

下面将详细介绍每个步骤需要做什么,以及相应的代码示例。

1. 准备工作

在开始编写代码之前,我们需要知道具体的需求是什么,即需要执行哪些命令,以及需要获得命令的执行结果。

2. 执行命令

Java执行命令的常用方法是使用它ProcessBuilder类别。以下是调用cmd交互式执行命令的代码示例:

import java.io.IOException;public class CmdExecutor {    public static void main(String[] args) {        String command = "cmd.exe";        String[] arguments = {"/c", "dir"};        try {            ProcessBuilder processBuilder = new ProcessBuilder(command);            processBuilder.redirectErrorStream(true);            Process process = processBuilder.start();            process.getOutputStream().close();            process.getInputStream().close();            process.getErrorStream().close();            process.waitFor();            int exitCode = process.exitValue();            System.out.println("Command executed with exit code: " + exitCode);        } catch (IOException | InterruptedException e) {            e.printStackTrace();        }    }}

此处的command要执行的命令,arguments是命令的参数。

代码中的ProcessBuilder类别用于创建新的过程。通过start()方法启动过程执行命令。

redirectErrorStream(true)该方法用于合并子进程的错误输出流和标准输出流。通过这种方式,我们可以通过标准输出流获得命令的执行结果。

getOutputStream().close()getInputStream().close()getErrorStream().close()该方法分别关闭标准输入流、标准输出流和错误输出流。

waitFor()该方法用于等待过程完成。

exitValue()该方法获得了该过程的退出值,即命令的执行结果。

3. 输出结果

在执行命令之后,我们需要获得并输出命令的执行结果。以下是获取命令执行结果的代码示例:

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;public class CmdExecutor {    public static void main(String[] args) {        // ...        try {            // ...            InputStream inputStream = process.getInputStream();            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));            String line;            while ((line = reader.readLine()) != null) {                System.out.println(line);            }            reader.close();        } catch (IOException e) {            e.printStackTrace();        }    }}

在上述代码中,我们通过process.getInputStream()获取命令执行结果的输入流。然后使用它BufferedReader类读取输入流,逐行输出命令执行结果。

完整代码

以下是完整的示例代码:

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;public class CmdExecutor {    public static void main(String[] args) {        String command = "cmd.exe";        String[] arguments = {"/c", "dir"};        try {            ProcessBuilder processBuilder = new ProcessBuilder(command);            processBuilder.redirectErrorStream(true);            Process process = processBuilder.start();            process.getOutputStream().close();            InputStream inputStream = process.getInputStream();            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));            String line;            while ((line = reader