`

java程序里运行外部程序

    博客分类:
  • java
 
阅读更多

使用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类的方法实现。下面是一种比较典型的程序模式:  显然,前一种方法更为简捷方便。
  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();

 

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");
分享到:
评论

相关推荐

    通过Java运行一个外部程序

    在Java编程中,有时我们需要执行操作系统级别的任务,例如运行一个外部程序或命令。这可以通过Java的`Runtime`类提供的`exec()`方法实现。标题和描述中的示例代码演示了如何在Windows环境下启动一个名为`msimn.exe`...

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

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

    java软件的安装和运行程序的方法

    Java 软件的安装和运行程序的方法 Java 软件的安装和运行程序的方法是 Java 开发者需要掌握的基本技能之一。这篇文章将指导您如何安装和运行 Java 软件,检查 JDK 是否安装成功,并使用 JCreator 和命令提示符编译...

    用bat运行java文件中引用了外部jar的java程序

    在IT行业中,我们经常需要处理各种编程任务,其中之一就是在命令行环境下运行包含外部jar依赖的Java程序。在Windows操作系统中,我们通常会使用批处理(BAT)文件来自动化这一过程。下面将详细介绍如何通过BAT文件...

    java程序生成本地EXE等可运行程序

    5. 此时可以单击“Run”按钮,测试程序运行结果,如若没有问题,可以继续单击下一步。 6. 选择JAR的转换方式,一共三种,可自己根据需要选择,继续单击下一步。 7. 继续单击下一步。 8. 输入“EXE文件名称”,选择...

    java程序自动重新启动

    在给定的标题"java程序自动重新启动"中,我们可以理解这是一个实现了自动重启逻辑的Java程序。描述指出,这个程序由三个.java文件组成:Test.java、Watch.java和AbstractRun.java,它们构成了一个简单的自动重启系统...

    完整版运行外部程序.rar

    在编程语言中,如Python、Java、C#等,都有内置的库函数支持运行外部程序。例如,Python的`os`模块提供了`subprocess`子模块,Java有`Runtime.getRuntime().exec()`方法,C#则有`System.Diagnostics.Process`类。 ...

    运行外部程序.rar

    运行外部程序是计算机编程中的一个常见操作,尤其是在自动化任务、脚本编写或系统集成中。在Windows、Linux或macOS等操作系统中,我们都可以通过不同的方式来启动一个外部应用程序。这个压缩包“运行外部程序.rar”...

    一些java简单程序

    1. **环境搭建**:首先,你需要下载并安装Java Development Kit (JDK),设置好环境变量,包括JAVA_HOME、PATH和CLASSPATH,确保可以在命令行中运行Java程序。 2. **基本语法**:Java的语法规则类似于C++,但更加...

    清华Java程序设计实例教程

    【Java程序设计基础】 在Java程序设计中,基础至关重要。Java是一种面向对象的编程语言,由Sun Microsystems(现为Oracle公司)的James Gosling于1995年发布。它的设计目标是“简单、面向对象、健壮、安全”,这...

    雍俊海 Java程序设计教程 课后答案

    Java程序设计是软件开发的基础,尤其对于初学者来说,掌握好Java语言的语法和编程思想至关重要。雍俊海的《Java程序设计教程》是一本深受读者欢迎的教材,其第二版更加深入浅出地讲解了Java的核心概念和技术。课后...

    Java程序设计课件

    在本"Java程序设计课件"中,我们将深入探讨Java程序的结构框架、运行机理、Java虚拟机(JVM)以及Java的垃圾回收机制等核心概念。 首先,Java程序的结构框架通常遵循面向对象的设计原则,包括类、对象、接口和继承...

    运行外部程序.e.rar

    在Java中,`Runtime.getRuntime().exec()`方法用于运行外部程序,而`ProcessBuilder`类提供了更多灵活性,如设置工作目录、环境变量等。 标签"运行外部程序.e.rar"可能是指这个压缩包包含了一个关于如何在特定环境...

    JAVA 实时运行环境插件

    Java实时运行环境插件是Java应用程序的一个关键组成部分,主要用于在Internet Explorer浏览器中运行Applet小程序。Applet是一种基于Java的小型应用程序,它可以在用户的Web浏览器中执行,为用户提供丰富的交互体验。...

    java程序设计教程第七版课后习题答案

    Java程序设计教程第七版是Java学习者的重要参考资料,其课后习题答案对于巩固理论知识、提高编程技能具有极大帮助。本教程涵盖了Java语言的基础到高级特性,包括但不限于语法、面向对象编程、异常处理、集合框架、多...

    用java 调用外部程序

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

    使用JavaService把Java程序转换成windows服务

    将Java程序转换为Windows服务是通过JavaService工具实现的,这个工具允许Java应用程序在Windows操作系统中作为服务运行,从而在系统启动时自动启动程序,并且可以在服务管理器中进行管理。下面将详细讲解如何操作和...

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

    `Process`类是`exec()`方法返回的对象,它代表了Java程序启动的外部进程。通过`Process`对象,我们可以获取到与外部进程相关的输入、输出和错误流,从而实现程序间的交互。例如,我们可以通过`getInputStream()`获取...

    Java程序设计基础教程

    Java程序设计基础教程是入门Java编程的必备指南,它涵盖了从环境配置到基本语法,再到面向对象编程等核心概念。本教程旨在帮助初学者建立起坚实的Java编程基础,并逐步熟悉整个开发流程。 首先,我们从环境配置开始...

    Java程序设计基础(第5版)

    8. **异常处理**:Java的异常处理机制提供了在程序运行时处理错误的能力,通过try-catch-finally语句块来捕获和处理异常。 9. **集合框架**:Java集合框架包括数组列表、链表、队列、栈、集合、映射等数据结构,...

Global site tag (gtag.js) - Google Analytics