Runtime、ProcessBuilder的区别(Java中,两种方法来启动其他程序)
创始人
2024-05-09 15:21:09
0

目录

■Runtime、ProcessBuilder 区别:

■Java中提供了两种方法来启动其他程序

■代码

・Runtime

・ProcessBuilder

■类的方法

・Process.waitFor()方法

・Process.getErrorStream()方法

・Process.redirectErrorStream(true)方法:

■可运行代码

・java代码

・运行的bat代码

・结果

■其它资料整理

■参考


=================

■Runtime、ProcessBuilder 区别:

ProcessBuilder.start() 和 Runtime.exec()传递的参数有所不同,
・Runtime.exec()可接受一个单独的字符串,这个字符串是通过空格来分隔可执行命令程序和参数的;
・ProcessBuilder的构造函数是一个字符串列表或者数组。列表中第一个参数是可执行命令程序,其他的是命令行执行是需要的参数。

■Java中提供了两种方法来启动其他程序

也就是说,
在编写Java程序时,有时候我们需要调用其他的诸如 exe,bat ,shell  这样的程序或脚本。在Java中提供了两种方法来启动其他程序:
(1) 使用Runtime的exec()方法
(2) 使用ProcessBuilder的start()方法

■代码

・Runtime

String command = "/XXXX/XXX/xxx.bat param1";
Process pro1 = Runtime.getRuntime().exec(command);
InputStream errorInfo = pro1.getErrorStream();

====

・ProcessBuilder

List commandList = new ArrayList<>();
commandList.add("/XXXX/XXX/xxx.bat");
commandList.add("param1");
ProcessBuilder pb = new ProcessBuilder(commandList);
Process pro2 = pb.start();
pro2.waitFor();

===

■类的方法

・Process.waitFor()方法

processBuilder.start() 会立刻返回,不会待ps进程结束。所以Process提供waitFor方法,调用后线程阻塞,直到ps命令结束。
 

・Process.getErrorStream()方法

创建的子进程没有自己的终端或控制台。它的所有标准 io(即 stdin,stdout,stderr)操作都将通过三个流 (getOutputStream(),getInputStream(),getErrorStream()) 重定向到父进程。
 

・Process.redirectErrorStream(true)方法:

合并输出流和错误流。

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;
} 

==

■可运行代码

・java代码

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();}}}

・运行的bat代码

@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

相关内容

热门资讯

安卓系统计划软件推荐,精选计划... 你有没有发现,手机里的安卓系统越来越智能了?这不,最近我可是挖到了一些超棒的安卓计划软件,它们不仅能...
收钱吧安卓系统插件,便捷支付新... 你有没有发现,现在的生活越来越离不开手机了?手机里装满了各种应用,而今天我要跟你聊聊一个特别实用的工...
鸿蒙系统是否还属于安卓,独立于... 你有没有想过,那个在我们手机上默默无闻的鸿蒙系统,它到底是不是安卓的“亲戚”呢?这个问题,估计不少手...
安卓系统手机用什么钱包,轻松管... 你有没有想过,你的安卓系统手机里装了那么多应用,但最离不开的,可能就是那个小小的钱包了。没错,就是那...
安卓系统能玩部落冲突吗,部落冲... 你有没有想过,安卓系统上的手机,是不是也能玩那款风靡全球的《部落冲突》呢?这款游戏自从推出以来,就吸...
智能机器人安卓系统,引领未来智... 你知道吗?在科技飞速发展的今天,智能机器人已经不再是科幻电影里的专属了。它们正悄悄地走进我们的生活,...
华为win10系统改装安卓系统... 你有没有想过,你的华为笔记本电脑里的Windows 10系统,能不能来个华丽变身,变成安卓系统呢?这...
旧电脑上安什么安卓系统,适配不... 你那台旧电脑是不是已经闲置好久了?别让它默默无闻地躺在角落里,给它来个华丽变身吧!今天,就让我来告诉...
安卓app语言跟随系统,随系统... 你知道吗?在手机世界里,有一个神奇的小功能,它就像你的贴身翻译官,无论你走到哪里,都能帮你轻松应对各...
惠城安卓系统降级在哪,揭秘降级... 你有没有遇到过手机系统升级后,发现新系统让你头疼不已,想回到那个熟悉的安卓系统呢?别急,今天就来告诉...
阿里云系统转安卓,揭秘安卓平台... 你知道吗?最近有个大动作在互联网圈里引起了不小的波澜,那就是阿里云系统竟然要转战安卓阵营了!这可不是...
安卓系统有最美壁纸么,探寻最美... 哦,亲爱的安卓用户,你是否曾在某个午后,百无聊赖地翻看着手机,突然被那一张张壁纸惊艳了眼眸?是的,我...
安卓系统采用Linux操作系统... 你知道吗?安卓系统,这个在我们手机上无处不在的小家伙,它的心脏竟然是Linux操作系统内核!是不是觉...
安卓原生平板通用系统,探索安卓... 你有没有发现,现在市面上平板电脑的品牌和型号真是五花八门,让人挑花了眼?不过,你知道吗?在众多安卓平...
小米1系统是安卓几,搭载安卓几... 你有没有想过,你的小米手机里那个熟悉的系统,其实是基于安卓的哦!没错,就是那个全球最流行的手机操作系...
可以安装安卓系统的相机,智能摄... 你有没有想过,一台相机不仅能拍出美美的照片,还能像智能手机一样,玩转各种应用?没错,现在市面上就有这...
安卓系统gps定位不准,安卓G... 你是不是也遇到过这种情况?手机里的安卓系统GPS定位总是不准,让人头疼不已。有时候,你明明就在家附近...
电信机顶盒装安卓系统,开启智能... 你有没有想过,家里的电信机顶盒其实也可以装上安卓系统呢?听起来是不是有点不可思议?别急,让我带你一步...
安卓系统可以做苹果桌面,打造个... 你知道吗?现在科技的发展真是让人眼花缭乱,竟然有人想出了安卓系统可以做苹果桌面的神奇想法!是不是觉得...
安卓系统自带的网页,功能与特色... 你有没有发现,每次打开安卓手机,那熟悉的系统界面里总有一个默默无闻的小家伙——安卓系统自带的网页浏览...