首页 ┆ 网站地图 ┆ 在线留言 ┆ 游戏资讯 ┆ 资源下载  ┆ 端午节祝福 
设为首页
加入收藏
联系我们
热门关键字: .net应用  操作系统  Dreamweaver  WinRAR  网络推广
高级搜索
您当前的位置: 主页>JAVA专区>J2SE>如何在Java语言中调用可执行程序或Dos命令
如何在Java语言中调用可执行程序或Dos命令
来源: 发布时间:2008-06-29 发布人: 浏览: 人次   字体: [ ]  

在用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最为基础知识精华总结
·用Swing实现数据表格功能
·利用Java实现zip压缩/解压缩
·如何用Java获得IP地址
·什么时候用抽象类,什么时候用接口?
·JAVA通过JNI调用本地C语言方法
·Java开发中的事件驱动模型实例详解...
·如何使用Java操作Windows系统注册表
·为Java程序中添加播放MIDI音乐功能
·了解Java 语言中的IO系统
 §最新评论:(评论内容只代表网友观点,与本站立场无关!)
网名: 验证码:  【所有评论】【↑返回顶部
评 分: 12 345
评论内容:(不能超过500字,请自觉遵守互联网相关政策法规。[按 Ctrl+Enter 可直接提交]
注意:请勿在本站发布政治话题、色情及违反法律的内容。
IT知道网 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。
推 荐 文 章
·布局管理器OverlayLayout实现...
·如何安装安装java JDK以及正...
·java多线程通信机制以及yield...
·jar文件运行中发生ClassNotFo...
·详例实现java调用ORACLE的存...
·java读取和修改ini配置文件实
·如何用java实现快速排序算法...
·java中的字节流和字符流的存...
·Java调用SQL Server存储过程(
·java垃圾回收机制的意义及其...
·Java网络数据流解析的三种方...
·Java在Linux下处理图形遇到问
·在Linux上远程部署Java应用程
·用JAVA实现文本形式的树状结...
·JAVA冒泡排序法代码小实例
热 门 文 章
·JAVA冒泡排序法代码小实例
·怎么打包成jar文件步骤
·Java编写的模拟ATM取款机程序...
·Java操作Word, Excel文档示例
·什么时候用抽象类,什么时候用...
·用JAVA实现文本形式的树状结...
·java实现输出加密码保护的exc...
·实例解说java 反射机制
·Java调用SQL Server存储过程(...
·java中(overload)重载与(over...
·利用Java实现zip压缩/解压缩
·JAVA最为基础知识精华总结
·利用Java 3D技术播放动画之JM...
·基于java的图片文件格式转换...
·Java实现图像编码输出的示例...
网站首页 - 关于本站 - 加入收藏 - 网站地图 - 友情连接 - 在线留言 - 联系我们 - 返回顶部
Copyright © 2007 IT知道网.[冀ICP备07026896号]. All Rights Reserved .