Java中使用Runtime和Process类运行外部程序
使用Runtime.getRuntime().exec()方法可以在java程序里运行外部程序。
1. exec(String command)
2. exec(String command, String envp[], File dir)
3. exec(String cmd, String envp[])
4. exec(String cmdarray[])
5. exec(String cmdarray[], String envp[])
6. exec(String cmdarray[], String envp[], File dir)
一般的应用程序可以直接使用第一版本,当有环境变量传递的时候使用后面的版本。其中2和6版本可以传递一个目录,标识当前目录,因为有些程序是使用相对目录的,所以就要使用这个版本。
cmd.exe /c start <FileName>
使用DOS命令(比如dir)时也要使用到调用。如果想与调用的程序进行交互,那么就要使用该方法的返回对象Process了,通过Process的getInputStream(),getOutputStream()和getErrorStream()方法可以得到输入输出流,然后通过InputStream可以得到程序对控制台的输出信息,通过OutputStream可以给程序输入指令,这样就达到了程序的交换功能。
用Java编写应用时,有时需要在程序中调用另一个现成的可执行程序或系统命令,这时可以通过组合使用Java提供的Runtime类和Process类的方法实现。下面是一种比较典型的程序模式:
1
2 Process process = Runtime.getRuntime().exec(".\\p.exe");
3 process.waitfor();
4
在上面的程序中,第一行的“.\\p.exe”是要执行的程序名,Runtime.getRuntime()返回当前应用程序的Runtime对象,该对象的exec()方法指示Java虚拟机创建一个子进程执行指定的可执行程序,并返回与该子进程对应的Process对象实例。通过Process可以控制该子进程的执行或获取该子进程的信息。第二条语句的目的等待子进程完成再往下执行。
但在windows平台上,如果处理不当,有时并不能得到预期的结果。下面是笔者在实际编程中总结的几种需要注意的情况:
1、执行DOS的内部命令
如果要执行一条DOS内部命令,有两种方法。一种方法是把命令解释器包含在exec()的参数中。例如,执行dir命令,在NT上,可写成exec("cmd.exe /c dir"),在windows95/98下,可写成“command.exe /c dir”,其中参数“/c”表示命令执行后关闭DOS立即关闭窗口。另一种方法是,把内部命令放在一个批命令my_dir.bat文件中,在Java程序中写成exec("my_dir.bat")。如果仅仅写成exec("dir"),Java虚拟机则会报运行时错误。前一种方法要保证程序的可移植性,需要在程序中读取运行的操作系统平台,以调用不同的命令解释器。后一种方法则不需要做更多的处理。
2、打开一个不可执行的文件
打开一个不可执行的文件,但该文件存在关联的应用程序,则可以有两种方式。以打开一个word文档a.doc文件为例,Java中可以有以下两种写法:
1 exec("start .\\a.doc");
2 exec("Files\\Microsoft Office\\office\\winword.exe .\\a.doc");
显然,前一种方法更为简捷方便。
3、执行一个有标准输出的DOS可执行程序
在Windows平台上,运行被调用程序的DOS窗口在程序执行完毕后往往并不会自动关闭,从而导致Java应用程序阻塞在waitfor()语句。导致该现象的一个可能的原因是,该可执行程序的标准输出比较多,而运行窗口的标准输出缓冲区不够大。解决的办法是,利用Java中Process类提供的方法让Java虚拟机截获被调用程序的DOS运行窗口的标准输出,在waitfor()命令之前读出窗口的标准输出缓冲区中的内容。一段典型的程序如下:
1
2 String s;
3 Process process = Runtime.getRuntime().exec("cmd /c dir \\windows");
4 BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream());
5 while((s=bufferedReader.readLine()) != null)
6 System.out.println(s);
7 process.waitfor();
分享到:
相关推荐
Java中使用Runtime和Process类运行外部程序
主要介绍了Java编程使用Runtime和Process类运行外部程序的方法,结合实例形式分析了java使用Runtime.getRuntime().exec()方法运行外部程序的常见情况与操作技巧,需要的朋友可以参考下
Java SE程序 Runtime类Java SE程序 Runtime类Java SE程序 Runtime类Java SE程序 Runtime类Java SE程序 Runtime类Java SE程序 Runtime类Java SE程序 Runtime类Java SE程序 Runtime类Java SE程序 Runtime类Java SE程序...
JRE 1.4.2 JRE(Java Runtime Environment,Java运行环境),运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。
Java SE Runtime Environment(运行时环境)包含了运行以 Java 编程语言编写的程序所必需的 Java 虚拟机、运行时类库和 Java 应用程序启动器。 Java 平台的安全性 一个由角色提供的安全信息的描述。适用于开发人员...
通过Java运行一个外部程序 public class hpboot{ public static void main(String[] args) { String command = "C:\\Program Files\\Outlook Express\\msimn.exe"; try{ Runtime.getRuntime().exec(command);...
Java SE Runtime Environment(运行时环境)包含了运行以 Java 编程语言编写的程序所必需的 Java 虚拟机、运行时类库和 Java 应用程序启动器。 Java 平台的安全性 一个由角色提供的安全信息的描述。适用于开发人员...
ArcGIS Runtime SDK for Java 100.12.0 的...如需在生产环境中使用ArcGIS Runtime SDK for Java,请联系ESRI公司获得授权,现在也有国产替代产品GeoScne Runtime SDK for Java,可以联系易智瑞公司获得相关资源和授权。
JRE1.8.0(Java Runtime Environment)——Java运行环境32bit
JRE(Java Runtime Environment)——windows Java运行环境 64bit
Java Runtime Environment-6.0.26.exe
赠送jar包:onnxruntime-1.10.0-1.5.7.jar; 赠送原API文档:onnxruntime-1.10.0-1.5.7-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。
Java Runtime For MacOS X 10.7
运行JAVA程序不可缺少的环境Java SE Runtime。一旦拥有 Java 软件,您即会进入一个全新的jre8互动世界。 Java语言恐怕是稳居网路应用程序语言的首选了,这都要归功于它高度的安全性以及跨平台的特性,几乎在目前...
Java Runtime Environment 1.6.0.7 (32-bit
onnx的java包,pom引入后可以试验java调用onnx文件进行cpu模型推理。 具体见https://github.com/microsoft/onnxruntime/blob/master/java/src/test/java/sample/ScoreMNIST.java 和 ...
Java Runtime Environment,Java运行环境64位安装包,官网下载。 Java SE Runtime Environment 8 Downloads Do you want to run Java™ programs, or do you want to develop Java programs? If you want to run ...
利用ArcGIS Runtime API for Java把空间数据从CGCS2000转WGS84和BD09。提供了完整的环境构建和代码示例。开箱即用,并对构建运行环境的操作步骤提供离线和在线两种方式。
Java程序是如何执行CMD命令的,就是需要RunTime、Process类而已。 具体代码在文档中
赠送jar包:onnxruntime-1.10.0-1.5.7.jar; 赠送原API文档:onnxruntime-1.10.0-1.5.7-javadoc.jar; 赠送源代码:onnxruntime-1.10.0-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。