JAVA中执行DOS命令分析

下面是一种比较典型的程序模式:

  ...   Process process = Runtime.getRuntime().exec(".\p.exe");   process.waitfor( );   ...   在上面的程序中,第一行的“.\p.exe”是要执行的程序 名,Runtime.getRuntime()返回当前应用程序的Runtime对象,该对象的exec()方法指示Java虚拟机建立一个子进程执行指 定的可执行程序,并返回与该子进程对应的Process对象实例。经过Process能够控制该子进程的执行或获取该子进程的信息。第二条语句的目的等待 子进程完成再往下执行。   但在windows平台上,若是处理不当,有时并不能获得预期的结果。下面是笔者在实际编程中总结的几种须要注意的状况:   一、执行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虚拟机则会报运行时错误。前一种方法要保证程序的可移植性, 须要在程序中读取运行的操做系统平台,以调用不一样的命令解释器。后一种方法则不须要作更多的处理。   二、打开一个不可执行的文件   打开一个不可执行的文件,但该文件存在关联的应用程序,则能够有两种方式。 以打开一个word文档a.doc文件为例,Java中能够有如下两种写法:   exec("start .\a.doc");   exec(" c:\Program Files\Microsoft Office\office\winword.exe .\a.doc");   显然,前一种方法更为简捷方便。   三、执行一个有标准输出的DOS可执行程序   在 windows平台上,运行被调用程序的DOS窗口在程序执行完毕后每每并不会自动关闭,从而致使Java应用程序阻塞在waitfor( )。致使该现象的一个可能的缘由是,该可执行程序的标准输出比较多,而运行窗口的标准输出缓冲区不够大。解决的办法是,利用Java提供的Process 类提供的方法让Java虚拟机截获被调用程序的DOS运行窗口的标准输出,在waitfor()命令以前读出窗口的标准输出缓冲区中的内容。一段典型的程 序以下:   01....   02.String ls_1;   03.Process process = Runtime.getRuntime().exec("cmd /c dir \windows");   04.BufferedReader bufferedReader = new BufferedReader(
  05.new InputStreamReader(process.getInputStream());   06.while ( (ls_1=bufferedReader.readLine()) != null)   07.System.out.println(ls_1);   08.process.waitfor( );   09....   以上内容为转载~下面内容为原创!   今天在作客户端程序的自动更新,简单描述一下,就是从服务器上将更新包下载下来,而后在本地解压缩,最后删掉~功能很简单~   可是问题出在使用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");   这样写是不可能对的编程

相关文章
相关标签/搜索