`

Java中使用Runtime和Process类运行外部程序

    博客分类:
  • Java
 
阅读更多
http://www.cnblogs.com/xxpal/articles/824963.html

使用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类的方法实现。下面是一种比较典型的程序模式:
Process process = Runtime.getRuntime().exec(".\\p.exe");
process.waitfor(); 


在上面的程序中,第一行的“.\\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中可以有以下两种写法:
exec("start .\\a.doc");
exec("Files\\Microsoft Office\\office\\winword.exe .\\a.doc");

  显然,前一种方法更为简捷方便。
  3、执行一个有标准输出的DOS可执行程序
  在Windows平台上,运行被调用程序的DOS窗口在程序执行完毕后往往并不会自动关闭,从而导致Java应用程序阻塞在waitfor()语句。导致该现象的一个可能的原因是,该可执行程序的标准输出比较多,而运行窗口的标准输出缓冲区不够大。解决的办法是,利用Java中Process类提供的方法让Java虚拟机截获被调用程序的DOS运行窗口的标准输出,在waitfor()命令之前读出窗口的标准输出缓冲区中的内容。一段典型的程序如下:
String s;
Process process = Runtime.getRuntime().exec("cmd /c dir \\windows");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream());
while((s=bufferedReader.readLine()) != null)
System.out.println(s);
process.waitfor();
分享到:
评论

相关推荐

    Java中使用Runtime和Process类运行外部程序.docx

    在Java编程中,有时我们需要在程序中调用操作系统级别的命令或者执行外部程序,这就涉及到Java中的`Runtime`和`Process`类。这两个类提供了一种机制,使得Java应用程序能够与操作系统进行交互,执行系统命令或者运行...

    Java编程使用Runtime和Process类运行外部程序的方法

    主要介绍了Java编程使用Runtime和Process类运行外部程序的方法,结合实例形式分析了java使用Runtime.getRuntime().exec&#40;&#41;方法运行外部程序的常见情况与操作技巧,需要的朋友可以参考下

    通过Java运行一个外部程序

    总结来说,Java通过`Runtime.exec()`方法提供了与操作系统交互的能力,允许我们在Java程序中执行外部程序和命令。然而,为了保证程序的健壮性和安全性,需要对可能出现的异常进行处理,并且谨慎处理用户输入,避免...

    用JAVA调用外部程序并截出程序运行结果

    在Java编程中,有时我们需要与操作系统进行交互,执行一些外部程序并获取其运行结果。这通常通过使用Java的`Runtime`类或者`ProcessBuilder`类来实现。本文将详细讲解如何使用Java调用外部程序以及如何捕获并处理...

    完整版运行外部程序.rar

    在这个“完整版运行外部程序.rar”压缩包中,我们可以推测它可能包含了一个详细教程或工具,用于教导用户如何在不同的操作系统环境下启动和控制外部应用程序。 首先,我们需要了解什么是外部程序。在计算机系统中,...

    用java 调用外部程序

    在Java编程中,有时我们需要调用操作系统中的外部程序来执行特定任务,比如运行批处理脚本、系统命令或者使用第三方工具。这篇博文“用java 调用外部程序”可能详细介绍了如何在Java环境中实现这一功能。虽然描述...

    Java调用外部程序命令

    在Java中,调用外部程序主要涉及到三个类:`java.lang.Runtime`、`java.lang.Process` 和 `java.lang.ProcessBuilder`。下面分别介绍这些类的基本用法。 ##### 1. Runtime 类 `Runtime` 类提供了与当前Java应用...

    Java使用Runtime.exec()给Windows命令提示符做了个外壳,真的很山寨!

    `Runtime.exec()`是Java标准库中的一个方法,它位于`java.lang.Runtime`类中。这个方法允许我们执行外部程序,包括操作系统命令。在Windows环境下,这通常意味着可以调用CMD(命令提示符)或PowerShell来运行各种...

    使用runtime实现linux命令行或shell脚本多次调用

    在Java编程中,有时我们需要与操作系统进行交互...总的来说,通过`Runtime`类,我们可以方便地在Java程序中执行Linux命令和shell脚本,实现客户端的多次调用。但同时需要注意异常处理和资源管理,以保证程序的健壮性。

    java执行可执行文件,Runtime.exec、ProcessBuilder、commons-exec

    `Runtime.exec()`是最为传统且简单的执行外部程序的方法。它可以启动一个新的进程,并返回一个代表该进程的`Process`对象。但是,这种方法在处理进程的输入/输出流时存在一定的局限性。 **代码示例** ```java ...

    执行外部程序.rar

    - **Java**: Java使用`Runtime.getRuntime().exec()`或`ProcessBuilder`类来执行外部程序。`ProcessBuilder`允许设置环境变量、工作目录等。 - **C++**: C++中的`system()`函数可以执行shell命令,但更安全的方法...

    Java通过进程名称杀进程

    - JRE是Java应用程序运行时环境的基础部分,包含了Java虚拟机(JVM)、类库以及运行Java程序所需的其他支持组件。 - `Runtime.getRuntime()`方法可以获得当前Java应用程序的`Runtime`实例,从而执行操作系统级别的...

    java调用windows命令

    在Java编程中,有时我们需要在程序中调用Windows系统的命令行操作,例如执行外部程序、系统命令或者进行文件操作。Java提供了Runtime类和Process类来实现这一功能。以下是如何使用Java调用Windows命令行的详细步骤和...

    java中调用控制台程序

    "java中调用控制台程序"这个主题就是关于如何在Java应用程序中调用控制台命令,比如Windows系统的CMD命令行或者在Linux环境中使用wget工具。在Java中,我们可以使用Runtime类或者ProcessBuilder类来实现这样的功能。...

    Java Runtime类详解_动力节点Java学院整理

    Java的Runtime类是Java语言与运行环境之间的一个接口,它提供了很多方法来管理Java应用程序的运行环境,包括内存管理和执行外部程序等。Runtime类的实例是全局的,每个Java应用程序都只有一个Runtime实例,通过`...

    Java调用应用程序和Dos中的命令

    在Java中,`java.lang.Runtime`类提供了与当前运行时系统交互的方法,其中包括`exec()`方法,该方法允许我们启动一个新的进程并控制其输入和输出流。这对于需要与操作系统交互的任务非常有用。 #### 二、Runtime类...

    Java基于Runtime调用外部程序出现阻塞的解决方法

    在Java编程中,有时我们需要通过`Runtime`类或者`ProcessBuilder`类来调用外部程序,这在处理一些特定任务时非常有用,如文件转换、数据处理等。然而,在使用`Runtime.exec()`方法调用外部程序时,可能会遇到程序...

    Java软件开发实战 Java基础与案例开发详解 9-3 Rintime类的使用 共6页.pdf

    `Runtime`类是Java标准库中的一个重要组成部分,它提供了应用程序与运行环境之间交互的能力。由于Java程序本身是跨平台的,`Runtime`类的存在使得Java程序可以访问底层操作系统的一些特性,例如执行外部进程、查询...

    java调用外部文件

    在Java中,我们可以使用`Runtime.getRuntime().exec()`方法来执行系统命令。例如,假设我们有一个名为"myProgram.exe"的外部程序位于当前工作目录,我们可以这样调用它: ```java try { Process process = Runtime...

    Java 运行 bat 文件

    理解这些命令的语法和用法,如`copy`, `del`, `mkdir`等,有助于更好地编写bat文件并从Java程序中调用。 总结,Java运行bat文件主要依赖于Runtime类或ProcessBuilder类,需要处理好输出流,注意异常处理,并根据...

Global site tag (gtag.js) - Google Analytics