问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用Java程序解决

发布网友 发布时间:2022-04-25 22:14

我来回答

1个回答

热心网友 时间:2022-04-28 11:50

在编写Java程序时,有时候需要在Java程序中执行另外一个程序。
1、启动程序Java提供了两种方法用来启动其它程序:

(1)使用Runtime的exec()方法

(2)使用ProcessBuilder的start()方法

不管在哪种操作系统下,程序具有基本类似的一些属性。一个程序启动后就程序操作系统的一个进程,进程在执行的时候有自己的环境变量、有自己的工作目录。Runtime和ProcessBuilder提供了不同的方式来启动程序,设置启动参数、环境变量和工作目录。

能够在Java中执行的外部程序,必须是一个实际存在的可执行文件,对于shell下的内嵌命令是不能直接执行的。

采用Runtime的exec执行程序时,首先要使用Runtime的静态方法得到一个Runtime,然后调用Runtime的exec方
法。可以将要执行的外部程序和启动参数、环境变量、工作目录作为参数传递给exec方法,该方法执行后返回一个Process代表所执行的程序。

Runtime有六个exec方法,其中两个的定义为:

public Process exec(String[] cmdarray, String[] envp, File dir)

public Process exec(String command, String[] envp, File dir)

cmdarray和command为要执行的命令,可以将命令和参数作为一个字符串command传递给exec()方法,也可以将命令和参数一个一个的方在数组cmdarray里传递给exec()方法。

envp为环境变量,以name=value的形式放在数组中。dir为工作目录。

可以不要dir参数,或者不要envp和dir参数,这样就多出了其它4个exec()方法。如果没有dir参数或者为null,那么新启动的
进程就继承当前java进程的工作目录。如果没有envp参数或者为null,那么新启动的进程就继承当前java进程的环境变量。

也可以使用ProcessBuilder类启动一个新的程序,该类是后来添加到JDK中的,而且被推荐使用。通过构造函数设置要执行的命令以及
参数,或者也可以通过command()方法获取命令信息后在进行设置。通过directory(File directory)
方法设置工作目录,通过environment()获取环境变量信息来修改环境变量。

在使用ProcessBuilder构造函数创建一个新实例,设置环境变量、工作目录后,可以通过start()方法来启动新程序,与Runtime的exec()方法一样,该方法返回一个Process对象代表启动的程序。

ProcessBuilder与Runtime.exec()方法的不同在于ProcessBuilder提供了
redirectErrorStream(boolean redirectErrorStream)
方法,该方法用来将进程的错误输出重定向到标准输出里。即可以将错误输出都将与标准输出合并。

2、Process

不管通过那种方法启动进程后,都会返回一个Process类的实例代表启动的进程,该实例可用来控制进程并获得相关信息。Process 类提供了执行从进程输入、执行输出到进程、等待进程完成、检查进程的退出状态以及销毁(杀掉)进程的方法:

(1) void destroy()

杀掉子进程。

一般情况下,该方法并不能杀掉已经启动的进程,不用为好。

(2) int exitValue()

返回子进程的出口值。

只有启动的进程执行完成、或者由于异常退出后,exitValue()方法才会有正常的返回值,否则抛出异常。

(3)InputStream getErrorStream()

获取子进程的错误流。

如果错误输出被重定向,则不能从该流中读取错误输出。

(4)InputStream getInputStream()

获取子进程的输入流。

可以从该流中读取进程的标准输出。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
珍珠粉可以天天敷脸吗 教你自制珍珠粉面膜 中超什么时候成立 交通刷卡金是什么 哪吒V上市进入倒计时,车身超4米,轴距为2420mm,续航里程401km. 关于倩女幽魂爆鬼问题 倩女幽魂什么是大宝队 关于倩女幽魂爆鬼分红的问题 泰国绿咖喱中的咖喱酱是如何制作的,它的独特口味来源于哪些香料?_百度... 好看电视剧,推荐个,现代都市剧,古装剧,战争爱情剧都可以,要经典,确确 ... 去北京上大学转户口好不好 运行JAVA程序要用什么软件啊? 如何用一个java程序打开一个java程序 用java程序 请回答使用Java JDK编写运行Java程序需要哪些步骤? 使用记事本编写JAVA程序,并运行输出结果,具体的实现步骤是什么? 梦见自己女儿被医生杀死了大哭 电脑怎么用记事本写Java程序并运行? 妈妈梦到女儿被水冲走,大哭是什么意思 如何使用java程序? 妈妈做梦梦到女儿死了我一点都不伤心? 中药材,夜交藤是否适合泡酒?? 喝了酒后,能喝夜交藤水吗? 谁知道“甲蒌”的医学名称啊 App开发者日记:iOS app开发是什么样的 猪笼草介绍50字 海南叫假捞叶的是什么植物 ios app开发需要什么技术 假蒌的蒌字是用竹字头的“篓”还是用“蒌”呀? 学iOS app开发,从最基本的学是什么 假蒌叶怎么做好吃,假蒌叶的吃法 新中国成立后的大事件时间轴是什么? 新中国成立后的大事件有哪些? 新中国成立以后发生了哪些大事? 新中国成立后的历史大事件25件交代时间,人物及事件 中华人民共和国成立后的十个重大事件 男孩读职高学什么专业好 男生职高学什么专业好? 新中国成立以后1949至今的中国重大事件有哪些? 男孩职高选什么专业好 职高有哪些专业适合男生? 启动仪式上把手按在上面就会灯亮以表示开幕的那种仪器叫什么,租用大概多少钱啊? 新中国成立以来的大事件有哪些? 男孩职高报什么专业比较好 高考倒计时启动仪式的感想及对高三的计划800字左右 男孩职高学什么专业好? 如何用命令方式运行java程序 如何组织部队安全计时牌启动仪式? 职高男生学什么专业吃香? 电影《天堂倒计时》在北京举行项目启动仪式,有哪些演员参演? 职中都有哪些适合男孩子的专业?