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()
该方法获得了该过程的退出值,即命令的执行结果。
在执行命令之后,我们需要获得并输出命令的执行结果。以下是获取命令执行结果的代码示例:
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
