Java使用ProcessBuilder类执行Node脚本

本文介绍了Java的ProcessBuilder类如何在Node.js环境中执行JS脚本,包括执行字符串、文件,传递参数以及调用接口的使用案例,展示了如何通过ProcessBuilder与Node.js进程交互。
摘要由CSDN通过智能技术生成

目录

环境:

ProcessBuilder类的介绍及使用:

使用案例:

1、执行JS脚本字符串

2、执行JS文件

3、执行JS文件并传参

4、执行JS文件调用接口

注意:


环境:

JDK:1.8

Node:v16.17.0

ProcessBuilder类的介绍及使用:

ProcessBuilder类是Java中的一个用于创建操作系统进程的类。它允许你在Java程序中启动外部程序或命令,并与它们进行交互。ProcessBuilder类提供了一种灵活的方式来构建和管理进程,使得你可以方便地执行各种任务,如运行脚本、执行系统命令等。

以下是关于ProcessBuilder类的详细介绍:

  1. 构造函数:ProcessBuilder类有一个无参构造函数,可以创建一个空的ProcessBuilder对象。此外,它还有两个重载的构造函数,分别接受一个字符串数组和一个字符串列表作为参数。这两个构造函数用于指定要执行的命令和参数。

  2. start()方法:ProcessBuilder类提供了一个start()方法,用于启动进程。当你调用这个方法时,它会创建一个新的进程,并执行指定的命令和参数。start()方法返回一个Process对象,表示新创建的进程。

  3. Process对象:Process对象表示一个正在运行的操作系统进程。通过Process对象,你可以获取进程的状态信息、读取进程的输出、写入数据到进程等。Process对象提供了一些方法来管理进程,如waitFor()、destroy()等。

使用案例:

1、执行JS脚本字符串

public static void main(String[] args) {
        // 创建一个ProcessBuilder对象,用于执行Node.js脚本
        ProcessBuilder processBuilder = new ProcessBuilder("D:\\install\\nodejs\\node.exe", "-e", "console.log('Hello,World!')");
        try {
            // 启动进程并等待其完成
            Process process = processBuilder.start();
            // 读取脚本的输出
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
            reader.close();
            int exitCode = process.waitFor();
            System.out.println("Node.js script exited with code: " + exitCode);
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }

2、执行JS文件

public static void main(String[] args) {
        // 指定要执行的Node.js脚本文件路径
        String scriptPath = "D:\\test.js";
        // 创建一个ProcessBuilder对象,用于执行Node.js脚本
        ProcessBuilder processBuilder = new ProcessBuilder("D:\\install\\nodejs\\node.exe", scriptPath);
        try {
            // 启动进程并等待其完成
            Process process = processBuilder.start();
            // 读取脚本的输出
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
            reader.close();
            int exitCode = process.waitFor();
            System.out.println("Node.js script exited with code: " + exitCode);
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }

console.log('Hello,World!')

3、执行JS文件并传参

public static void main(String[] args) {
        // 指定要执行的Node.js脚本文件路径
        String scriptPath = "D:\\test.js";
        // 创建一个ProcessBuilder对象,用于执行Node.js脚本
        ProcessBuilder processBuilder = new ProcessBuilder("D:\\install\\nodejs\\node.exe", scriptPath, "Hello,World!");
        try {
            // 启动进程并等待其完成
            Process process = processBuilder.start();
            // 读取脚本的输出
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
            reader.close();
            int exitCode = process.waitFor();
            System.out.println("Node.js script exited with code: " + exitCode);
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }

// process.arg是非常重要的全局对象,它包含命令行参数。当你运行一个Node.js脚本时,命令行参数会被赋值给process.argv
const args = process.argv.slice(2);
console.log(args)

4、执行JS文件调用接口

public static void main(String[] args) {
        // 指定要执行的Node.js脚本文件路径
        String scriptPath = "D:\\test.js";
        // 创建一个ProcessBuilder对象,用于执行Node.js脚本
        ProcessBuilder processBuilder = new ProcessBuilder("D:\\install\\nodejs\\node.exe", scriptPath);
        try {
            // 启动进程并等待其完成
            Process process = processBuilder.start();
            // 读取脚本的输出
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
            reader.close();
            int exitCode = process.waitFor();
            System.out.println("Node.js script exited with code: " + exitCode);
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }
const http = require('http');
const options = {
  hostname: '127.0.0.1',
  port: 8080,
  path: '接口路径',
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    "Authorization":"请求头信息"
  }
};
const postData = JSON.stringify({接口传参});
const req = http.request(options, (res) => {
res.on('data', (chunk) => {
    console.log(`响应数据: ${chunk}`);
  });
});
req.write(postData);
req.end();

注意:

以上案例都为本人亲测可用,如有疑问可私信交流。

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值