Board logo

标题: JAVA如何调用DOS命令 [打印本页]

作者: qingqing3721    时间: 2011-12-6 13:27     标题: JAVA如何调用DOS命令

下面是一种比拟典型的程序形式:
  



...
  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");
  这样写是不能够对的~




欢迎光临 编程开发论坛 (http://bbs.lihuasoft.net/) Powered by Discuz! 6.0.0