目录
■Runtime、ProcessBuilder 区别:
■Java中提供了两种方法来启动其他程序
■代码
・Runtime
・ProcessBuilder
■类的方法
・Process.waitFor()方法
・Process.getErrorStream()方法
・Process.redirectErrorStream(true)方法:
■可运行代码
・java代码
・运行的bat代码
・结果
■其它资料整理
■参考
=================
ProcessBuilder.start() 和 Runtime.exec()传递的参数有所不同,
・Runtime.exec()可接受一个单独的字符串,这个字符串是通过空格来分隔可执行命令程序和参数的;
・ProcessBuilder的构造函数是一个字符串列表或者数组。列表中第一个参数是可执行命令程序,其他的是命令行执行是需要的参数。
也就是说,
在编写Java程序时,有时候我们需要调用其他的诸如 exe,bat ,shell 这样的程序或脚本。在Java中提供了两种方法来启动其他程序:
(1) 使用Runtime的exec()方法
(2) 使用ProcessBuilder的start()方法
String command = "/XXXX/XXX/xxx.bat param1";
Process pro1 = Runtime.getRuntime().exec(command);
InputStream errorInfo = pro1.getErrorStream();
====
List commandList = new ArrayList<>();
commandList.add("/XXXX/XXX/xxx.bat");
commandList.add("param1");
ProcessBuilder pb = new ProcessBuilder(commandList);
Process pro2 = pb.start();
pro2.waitFor();
===
processBuilder.start() 会立刻返回,不会待ps进程结束。所以Process提供waitFor方法,调用后线程阻塞,直到ps命令结束。
创建的子进程没有自己的终端或控制台。它的所有标准 io(即 stdin,stdout,stderr)操作都将通过三个流 (getOutputStream(),getInputStream(),getErrorStream()) 重定向到父进程。
合并输出流和错误流。
Process阻塞问题_Dancen的博客-CSDN博客_process start 阻塞
public int execute()
{int rs = 0;String[] cmds = {...};//command and arg ProcessBuilder builder = new ProcessBuilder(cmds); builder.redirectErrorStream(true); Process process = builder.start(); BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); String output = null; while (null != (readLine = br.readLine())){ print(output); } rs = process.waitFor();return rs;
}
==
package com.sxz.study.process;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;public class TestProcess {public static void main(String[] args) {List commandList = new ArrayList<>();commandList.add("C:\\myBat\\CreateFile.bat");commandList.add("test0001");commandList.add("the test 0002 row");commandList.add("theTest0003Row");ProcessBuilder pb = new ProcessBuilder(commandList);Process pro2 = null;try {pro2 = pb.start();// =====CreateFile.bat=================================START
// @echo off
//
// set param1=%1
// set param2=%2
// set param3=%3
//
// cd %~dp0
//
// echo %param1%>testProcess.txt
// echo %param2%>>testProcess.txt
// echo %param3%>>testProcess.txt // =====CreateFile.bat=================================END} catch (IOException e) {e.printStackTrace();}try {pro2.waitFor();} catch (InterruptedException e) {e.printStackTrace();}}}
@echo offset param1=%1
set param2=%2
set param3=%3cd %~dp0echo %param1%>testProcess.txt
echo %param2%>>testProcess.txt
echo %param3%>>testProcess.txt
====
test0001
"the test 0002 row"
theTest0003Row
===
https://blog.csdn.net/sxzlc/article/details/128607097
ProcessBuilder 、Runtime和Process 的区别_sunshine_pb的博客-CSDN博客_processbuilder和runtime的区
====
上一篇:Linux环境配置
下一篇:前言技术之swagger