`

JAVA编程实现调用可执行程序或系统命令

阅读更多
   用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"),在windows 95/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(" c:\\Program Files\\Microsoft Office\\office\\winword.exe .\\a.doc");
显然,前一种方法更为简捷方便。

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

今天在做客户端程序的自动更新,简单描述一下,就是从服务器上将更新包下载下来,然后在本地解压缩,最后删掉~功能很简单~

但是问题出在使用JAVA的ZIP模块做文件的解压缩不是想象的那么简单,资源需要释放,一个不小心就没有办法删除掉原有ZIP文件了~资源的占用确实是个大问题,但是好在,客户端程序更新完是要重启的,一切都烟消云散了~对于删除不掉ZIP文件的问题,我也流氓一下~用DEL硬删除~此处一定要注意!

Process process = Runtime.getRuntime().exec("cmd /c del f:\\aaa.doc");
这样的调用是没有问题~

Process process = Runtime.getRuntime().exec("del f:\\aaa.doc");
这样写是不可能对的~
分享到:
评论
1 楼 genier200 2009-12-14  
谢谢分享

相关推荐

    java中两种方式调用其他.exe可执行程序

    Java 是一种广泛应用于企业级应用开发的编程语言,可以调用其他.exe 可执行程序,实现一些特殊的功能。在 Java 中有两种方式可以调用其他.exe 可执行程序,即使用 `Desktop` 类和 `Runtime` 类。 使用 `Desktop` 类...

    java调用windows命令

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

    Linux下Java中调用可执行程序

    为了确保程序在不同操作系统下都能正确调用可执行程序,可以在执行`exec()`之前检查操作系统的名称。例如,通过`System.getProperty("os.name")`获取操作系统名称,然后根据名称(如"Windows XP")来决定执行策略。...

    java工程 实现调用系统命令ping

    在Java编程中,有时我们需要与操作系统进行交互,执行系统级别的任务,例如检查网络连接的可达性。本示例探讨了如何在Java工程中实现调用系统命令“ping”来达到这个目的。首先,我们需要理解“ping”命令的基本原理...

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

    在Java编程中,有时候我们需要执行一些操作系统级别的任务,例如启动一个外部程序、执行一些系统命令等。这通常可以通过Java的`Runtime`类实现,尤其是通过`Runtime.exec()`方法来创建一个新的进程。本文将详细介绍...

    java调用exe可执行文件

    在Java编程中,有时我们需要与操作系统进行交互,例如调用已存在的Windows系统下的.exe可执行文件。这在处理一些特定的任务,如自动化脚本、数据分析或者其他需要借助外部工具完成的功能时非常常见。本文将深入探讨...

    用java程序调用ffmpeg执行视频文件格式转换flv

    在本文中,我们将深入探讨如何使用Java程序调用FFmpeg执行视频文件格式转换,特别是将非FFmpeg原生支持的格式转换为FLV格式。FFmpeg是一个强大的多媒体处理工具,支持多种视频、音频格式的编码、解码和转换。在这个...

    Java调用Linux命令

    - **安全性**:直接执行外部命令可能会引入安全风险,特别是当命令字符串包含来自不可信源的数据时。 - **资源管理**:确保适当地关闭所有打开的流,并且在不再需要时销毁进程。 - **异常处理**:处理可能出现的`...

    Java如何调用可执行文件和批处理命令.doc

    Java调用可执行文件和批处理命令是Java开发中常见的需求,特别是在与系统交互或集成外部工具时。本文将详细讲解两种主要的方法:调用exe文件和通过转换批处理文件来间接调用。 首先,调用Windows下的可执行文件...

    java 调用windows的一些可执行文件

    在Java编程环境中,有时我们需要与操作系统进行交互,例如调用Windows系统的可执行文件或批处理文件来执行特定任务。这通常通过Java的Runtime类或ProcessBuilder类实现。这两个类允许我们构建命令行指令并执行它们,...

    java程序调用matble

    Path环境变量用于指定系统运行可执行文件的路径,而Classpath环境变量则用于告诉Java运行时环境在哪些路径下查找类。根据作者提供的信息,需要添加的路径包括JDK的bin目录、Matlab的javabuilder.jar以及dt.jar和...

    在Android中调用二进制可执行程序

    在深入探讨如何在Android环境中调用二进制可执行程序之前,首先需要理解Android系统的基本架构以及它与传统Linux系统之间的区别。Android基于Linux内核构建,因此支持许多与Linux相似的功能,比如可以运行二进制可...

    Java项目制作可执行程序与安装程序_java_

    在Java开发领域,将项目转化为可执行程序和安装程序是发布软件的重要步骤。这个Java项目展示了如何使用Exe4j生成Windows平台下的EXE可执行程序,并通过Inno Setup创建安装包,使得用户能够方便地在Windows环境中运行...

    [JAVA]使用JNI技术实现JAVA程序调用dll

    C/C++ 语言默认的调用方式是 __cdecl,所以在自己做可被 Java 程序调用的 dll 时一定要加上 __stdcall 的声明,否则在 Java 程序执行时会报类型不匹配的错误。 c. HANDLE icdev 是 Windows 操作系统中的一个概念,...

    JAVA如何调用DOS命令.doc

    在Java编程中,有时我们需要在程序中调用操作系统的一些功能,比如执行DOS命令,这通常是通过Java的`Runtime`类和`Process`类来实现的。本文将详细讲解如何在Java中调用DOS命令以及相关的注意事项。 首先,调用DOS...

    java 桌面程序打包jar可执行包,类似达成exe可执行程序

    标题提到的"java 桌面程序打包jar可执行包,类似达成exe可执行程序",指的是通过特定工具或方法,让Java程序像Windows平台上的.exe文件一样,双击即可运行。 Eclipse是一款广泛使用的Java集成开发环境(IDE),它...

    Java项目制作可执行程序与安装程序.rar

    Java项目开发过程中,将应用程序转化为可执行程序和安装程序是发布产品的重要步骤。在这个场景中,我们使用了JavaFX作为桌面应用的开发框架,以及JNA(Java Native Access)技术来实现与本地系统资源的交互。为了将...

    java执行可执行文件或批处理

    在Java中执行外部可执行文件或批处理脚本是一种常见的需求,尤其是在需要调用系统级别的工具或者与操作系统进行交互时。通过Java的`Runtime`类及其提供的方法,我们可以方便地实现这一功能。本文将详细介绍如何在...

    Java应用程序和java Web调用Matlab配置实例

    通过阅读和理解这份文档,你应该能成功地在Java应用程序或Web应用中调用Matlab,实现跨技术栈的协同工作。 总的来说,Java调用Matlab是一个强大且实用的技术结合,它允许开发者充分利用Matlab的计算能力,同时借助...

    定时调用java程序监控webservice或系统可用性

    在IT行业中,对服务或系统的...综上所述,通过Java编写定时调用的程序,我们可以实现对Web服务或系统的有效监控,并通过日志记录确保问题的可追溯性。这样的解决方案对于维护服务稳定性、保障业务连续性具有重要意义。

Global site tag (gtag.js) - Google Analytics