当前位置: 首页 > article >正文

Java拓展学习——Process类的学习和使用

一、Process类介绍

在 Java 代码中,Process类 具有以下含义:

  Process 是 Java 中的一个类,它表示一个正在执行的本地进程的类这个类提供了一些方法,允许 Java 程序与操作系统进程进行交互,例如启动一个新的进程获取进程的输入流和输出流,以及等待进程完成等操作。

        通常我们通过 Runtime.getRuntime().exec() 方法,去启动一个外部进程(比如执行一个外部程序、脚本等),然后用Process 类来接收该方法返回的进程实体。

例如:

Process pcs = Runtime.getRuntime().exec(cmds);
//使用 Java 的 Runtime 类执行提前准备好的命令,调用外部的程序。

通过使用 pcs 变量,可以对这个进程进行后续的操作,包括:

  • pcs.waitFor();:等待该进程完成执行。
  • pcs.getInputStream():获取进程的输入流,以便读取进程的输出。
  • pcs.getOutputStream():获取进程的输出流,以便向进程输入数据(如果进程支持)。
  • pcs.getErrorStream():获取进程的错误流,以读取进程的错误信息。

        使用 Process 类可以方便地在 Java 程序中调用外部程序,并与之进行通信,在这个例子中,就是为了调用一个 Python 程序(通过 Runtime.getRuntime().exec(cmds); 启动),并对该 Python 程序的执行结果进行处理,如读取其输出、等待其完成等操作。

以下是一个简单的代码示例,展示如何使用 Process 类启动一个外部程序:

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

public class ProcessExample {
    public static void main(String[] args) {
        try {
            // 启动一个新的进程,例如 Windows 的 dir 命令
            Process pcs = Runtime.getRuntime().exec("cmd /c dir");
            // 获取进程的输入流,以便读取进程的输出
            BufferedReader reader = new BufferedReader(new InputStreamReader(pcs.getInputStream()));
            String line;
            // 逐行读取进程的输出
            while ((line = reader.readLine())!= null) {
                System.out.println(line);
            }
            // 等待进程完成
            pcs.waitFor();
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}

上述代码解释:

在这个示例中:

  • Runtime.getRuntime().exec("cmd /c dir"); 启动了一个新的进程,这里执行的是 Windows 的 dir 命令。
  • BufferedReader reader = new BufferedReader(new InputStreamReader(pcs.getInputStream())); 获取了进程的输入流,并将其包装在 BufferedReader 中,以便逐行读取。
  • while ((line = reader.readLine())!= null) {...} 循环读取进程的输出并打印。
  • pcs.waitFor(); 等待进程执行完毕。

这样,你就可以通过 Process 类来调用外部程序并处理其输出。


http://www.kler.cn/a/516135.html

相关文章:

  • vue + element-ui 组件样式缺失导致没有效果
  • 服务器安装ESXI7.0系统及通过离线包方式升级到ESXI8.0
  • 困境如雾路难寻,心若清明步自轻---2024年创作回顾
  • 【java】签名验签防篡改研究测试
  • ChatGPT大模型极简应用开发-CH2-深入了解 GPT-4 和 ChatGPT 的 API
  • 63,【3】buuctf web Upload-Labs-Linux 1
  • mysql 计算2个时间段之间的间距
  • 差分轮算法-两个轮子计算速度的方法-阿克曼四轮小车计算方法
  • 从新手到高手的蜕变:MySQL 视图进阶全攻略
  • 不使用 JS 纯 CSS 获取屏幕宽高
  • 单片机内存管理剖析
  • 【Python模块】使用sys.path查看当前的模块搜索路径
  • Spring AOT
  • 2025-1-20-sklearn学习(42) 使用scikit-learn计算 钿车罗帕,相逢处,自有暗尘随马。
  • Linux网络之TCP
  • GOAT‘S AI早鸟报Part10
  • MFC程序设计(三)MFC程序启动
  • 动态路由协议基础知识
  • JavaScript系列(42)--路由系统实现详解
  • 2025.1.20——二、buuctf BUU UPLOAD COURSE 1 1 文件上传
  • 详解单片机学的是什么?(电子硬件)
  • Redis面试题每日20道【其一】
  • AI智慧社区--生成验证码
  • 【CPH系列】RFID标签读取模块,开发说明文档(包含重要内容和BUG)
  • K8S 启动探测、就绪探测、存活探测
  • 软考信安27~Windows操作系统安全相关