java中调用dos_JAVA如何调用DOS命令_weixin_39766109的博客-程序员宅基地

技术标签: java中调用dos  

用Java编写应用时,有时需要在程序中调用另一个现成的可执行程序或系统命令,这时可以通过组合使用Java提供的Runtime类和Process类的方法实现。下面是一种比较典型的程序模式:

...

1 Process process = Runtime.getRuntime().exec(".//p.exe");

2

3 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( );

...以上内容为转载~

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39766109/article/details/114080488

智能推荐

Day165.Bean生命周期 -Spring注解驱动_阿昌喜欢吃黄桃的博客-程序员宅基地

【Bean生命周期】Spring注解驱动容器管理bean生命周期构造方法 属性注入 后置处理器 初始化 后置处理器 销毁方法我们可以自定义初始化和销毁方法; 容器在bean进行到当前生命周期的时候来调用我们自定义的初始化和销毁方法bean的生命周期:bean创建—初始化—销毁生命周期顺序:↓构建构造方法(对象创建):单实例: 在容器启动的时候创建对象多实例: 在每次获取的时候创建对象BeanPostProcessor.postProcessBeforeInitiali

Cannot download 'https://start.spring.io': Remote host terminated the handshake , response: 200 OK_不服老的码农的博客-程序员宅基地

新建SpringBoot遇到如下错在:解决办法:'https://start.spring.io'改为:'http://start.spring.io'

现代OpenGL教程 01 - 入门指南_Leo_曦爵的博客-程序员宅基地

文章转载自:http://huangwei.pro/2015-05/modern-opengl1/以下是我学习opengl得到的启示最多的一篇文章,我强烈地建议大家去读一下这位大神的相关系列的文章!还有https://github.com/tomdalling/opengl-series。这里面的代码包含全面,真正想学习opengl的可以去看看!而且比我写的代码精致得多!译序早前学Op...

Linux下DMA添加两个channel,基于Linux嵌入式系统的ISA总线DMA的实现_weixin_39915700的博客-程序员宅基地

1.DMA概述本文引用地址:http://www.eepw.com.cn/article/151577.htmDMA是外设与主存之间的一种数据传输机制。一般来说,外设与主存之间存在两种数据传输方法:(1)Pragrammed I/O(PIO)方法,也即由CPU通过内存读写指令或I/O指令来持续地读写外设的内存单元(8位、16位或32位),直到整个数据传输过程完成。 (2)DMA,即由DMA控制器(...

BitmapFactory之Options_weixin_30878361的博客-程序员宅基地

package com.loaderman.customviewdemo;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.os.Environme...

随便推点

MiniDao_1.6.4 版本发布,轻量级Java持久化框架,Hibernate项目辅助利器_R芮R的博客-程序员宅基地

MiniDao 简介及特征 MiniDao 是一款超轻量的JAVA持久层框架,具备Mybatis一样的SQL能力: 支持SQL分离、支持标签、支持注解。MiniDao产生的初衷是为了解决Hibernate项目对复杂SQL支持能力,具备Mybatis一样的灵活性,同时支持事务同步。具有以下特征:O/R mapping不用设置xml,零配置便于维护不需要了解JDBC的知识...

一键开关机电路_荷兰风车的博客-程序员宅基地_一键开关机电路

以前设计过一个拨动式开关机电路(不是将总电源通过拨动开关进行通断处理),需使用一个LDO和微分电路配合处理,使开机拨动有效一次。该电路属于软开关机,而非硬开关机。       如果移动微功耗产品需采用按键式进行开关机处理,以达到降低功耗的目的。上图所示电路是一个很好参考电路,可以满足一般要求。同拨动式一样也是属于软开关机电路,比硬开关机电路要安全一些。       电路中最

java图片透明浮水印_PHP 为图片加上浮水印 (含浮水印透明背景处理)_weixin_39947396的博客-程序员宅基地

PHP 要为图片加上浮水印: 就是要将两张图合并在一起, 浮水印的图片要盖在上面.现实状况还会遇到原图要缩略图后, 浮水印的图片可能也要跟着缩略图, 这些部分再此就不写了, 此部份缩略图可见此篇:此篇只写如何用 PHP GD 来合并图片, 做浮水印功能.PHP 为图片加上浮水印 (含浮水印透明背景处理)PHP 要为图片加上浮水印 (两张图合并), 可用下述 Function:imagecopyme...

nginx反向代理服务器的工作原理_ywltoread的博客-程序员宅基地_nginx反向代理的工作原理

最近有打算研读nginx源代码,看到网上介绍nginx可以作为一个反向代理服务器完成负载均衡。所以搜罗了一些关于反向代理服务器的内容,整理综合。       一  概述                         反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器;并将从服务器上得到的结果返回给Int

如何修正因Windows和Linux或者Mac双系统引起的系统时间错误_leihelloworld的博客-程序员宅基地

如何修正因Windows和Linux或者Mac双系统引起的系统时间错误 曾经装过Windows和Linux或OS X双系统的人肯定都遇到过这样的情况:在Linux或OS X系统中设置好时区(+8)和系统时间以后,当再次重启返回Windows系统中后,会发现Windows系统的时间会错误,而误差刚好是在Linux或 OS X系统中设置的时区数。出现这种情况的原因是由于两种系统在设定时

mysql between和in_MySQL的WHERE语句中BETWEEN与IN的用法和他们的区别_13142ads的博客-程序员宅基地

MySQL BETWEEN 用法not可以对between...and取反。1.数值型BETWEEN 运算符用于 WHERE 表达式中,选取介于两个值之间的数据范围。BETWEEN 同 AND 一起搭配使用,语法如下:WHERE column BETWEEN value1 ANDvalue2WHERE column NOT BETWEEN value1 AND value2通常 value1 应该...