`
chenhua_1984
  • 浏览: 1251110 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Java调用批处理或可执行文件

    博客分类:
  • 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 " )

 

这样写是不可能对的~
用Java调用Dos命令时直接用以下命令就可以完成:

  String command = " ping 192.168.1.1 " ;
Runtime.getRuntime().exec(command);

 

并 可以使用Process类的getInputStream()方法获取输出结果,但是,我在调用一些工具软件的Dos命令时却出现了问题,输出结果只能取 到前面一小部分,经测试发现,exec(command)之后没多久,Java就认为这个进程结束了,并立即开始执行下面的操作,但这时command实 际上并没有结束,但由于流的关闭而被迫中断。

后来用了同事介绍的方法,将这些Dos命令全部放在一个批处理文件当中,并用

 

String command = " cmd /c start d:\\wmv.bat "

 

的方法来调用(如果不加cmd /c的话,执行同样会出错),这样一来,Java只是新起了一个进程去执行批处理,并不会去管进程是否结束,而是直接开始执行下面的语句。

但 这样还是有一个问题,就是Java和这个批处理没法进行交互,我试过了Process中的existValue()及waitFor()方法(都是网上说 可用来判断进程是否结束的方法),但都起不到作用,往往是进程已经结束了,但Java还认为没结束,或者干脆是Java认为结束了,但进程却实际还在运行 着。

 

 

 

 

 

分享到:
评论

相关推荐

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

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

    批处理执行java项目main方法

    这一步是为了确保批处理文件能找到Java的可执行文件,如`java.exe`。 3. **项目地址**: `cd /D %PROJECT_DIR%`用于切换到项目目录,`%PROJECT_DIR%`是你需要替换为实际项目路径的占位符。这样,批处理文件就能在...

    编写批处理命令来执行JAVA文件

    批处理文件(.bat)是一种文本文件,包含了可执行的DOS命令。当用户运行这个文件时,Windows会逐行解析并执行这些命令。这对于运行Java程序特别有用,尤其是需要设置环境变量或执行多条命令的情况。 2. **JAVA环境...

    生成java可执行文件

    标题中的“生成java可执行文件”指的是将Java程序转换成可以直接运行的格式,如同Windows操作系统下的.exe文件。这种转换的目的是使Java程序更便于运行,尤其是对于那些没有安装Java运行环境的用户。描述中提到的...

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

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

    批处理执行java代码

    这通常涉及到创建一个批处理脚本(在Windows系统中是`.bat`文件,在Unix或Linux系统中是`.sh`文件),然后在这个脚本中调用Java命令来运行程序。这种技术在需要定期执行任务、批量处理数据或者构建自动化流程时非常...

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

    综上所述,Java调用Windows可执行文件是一个常见的需求,可以通过Runtime或ProcessBuilder类实现。理解并正确使用这些功能,可以帮助开发者实现更复杂的跨平台集成需求。在具体应用中,应考虑安全性、错误处理和资源...

    图文解说教你如何把java源代码变成可执行文件exe

    将Java程序转换为可执行文件的另一种方法是创建一个批处理文件(.bat),该文件可以调用Java虚拟机(JVM)来执行JAR文件。 1. **创建批处理文件**: - 在Eclipse导出JAR文件所在的目录中新建一个文本文件,例如命名...

    java调用批处理

    在Java编程中,调用批处理操作...总之,Java调用批处理是一个涵盖广泛的主题,从简单的系统调用到复杂的批处理框架,都需要根据实际需求来选择合适的方法。理解这些概念和技术将有助于你编写出高效、可靠的批处理程序。

    java 导出 jar 文件 执行批处理

    综上所述,这篇博客可能涵盖了如何创建、配置、执行JAR文件,以及如何使用批处理文件来自动化这些过程,同时处理依赖管理的问题。了解这些知识对于Java开发者来说非常重要,因为它们是日常开发和部署Java应用的基础...

    windows批处理命令执行java程序

    `JAVA_HOME`应指向Java安装目录,`PATH`应包含`%JAVA_HOME%\bin`,这样系统才能找到`java.exe`可执行文件。 批处理文件的运行方式很简单,只需双击该文件或者在命令行窗口中输入文件路径即可。例如,如果批处理文件...

    Java环境变量设置-批处理文件

    当在命令行输入一个命令时,系统会在PATH变量指定的路径下查找相应的可执行文件。因此,我们需要将JDK的`bin`目录添加到PATH中,以便能直接运行`java`、`javac`等工具。 4. **CLASSPATH**:用于指示Java虚拟机(JVM)...

    Java开发环境配置批处理

    本文将详细介绍如何创建和使用批处理文件来配置Java开发环境,以及批处理文件在Java开发中的重要性。 首先,Java开发环境主要包括JDK(Java Development Kit)的安装,这是编写、编译和运行Java程序的基础。JDK包含...

    把java原代码变成可执行文件exe

    通过以上步骤,你就可以成功地将Java原代码转换为可执行的EXE文件,从而使得你的应用程序更加易于分发和使用,特别是在非技术用户群体中。这种方法不仅提高了应用的可用性,也增强了其外观的专业度。

    批处理文件启动Oracle服务

    在Java开发中,如果你需要在应用程序启动时确保Oracle服务已经运行,或者需要在程序内部操作Oracle服务,可以使用Java的Runtime类或者ProcessBuilder类来执行批处理文件或直接执行操作系统命令。 总的来说,批处理...

    java 多人聊天室源代码和可执行文件(jar和批处理文件)

    5. **用户界面设计**:客户端通常会有图形用户界面(GUI),可能是使用Java Swing或JavaFX库构建。这些库提供了丰富的组件,如文本框、按钮和标签,用于创建交互式的聊天窗口。 6. **事件驱动编程**:在GUI中,事件...

    java打包并生成可执行文件步骤

    本篇将详细阐述如何使用Java进行打包和生成可执行文件的过程。 首先,我们需要理解Java应用程序的运行机制。Java程序通常由一个主类(包含`public static void main(String[] args)`方法)开始执行,然后通过JVM...

    java 打包可执行文件

    下面将详细解释如何在Java中打包可执行文件,以及使用批处理加载(BatchLoad)可能涉及的概念。 首先,让我们理解什么是JAR文件。JAR文件是Java平台特有的归档格式,它可以包含多个Java类、资源文件、元数据(如...

Global site tag (gtag.js) - Google Analytics