java执行dos命令

核心代码:

 

try {
	String command = "cmd /c dir";
	Process process = Runtime.getRuntime().exec(command);
	BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
	while((output=bufferedReader.readLine()) != null){
		System.out.println(output);
	}
	process.waitFor();
} catch (IOException e) {
	e.printStackTrace();
} catch (InterruptedException e) {
	e.printStackTrace();
}
 

一、对于Process 

 1、JDK1.6是这么说的:Process是继承自Object的一个抽象类。

 2、由ProcessBuilder.start()[没研究过]Runtime.exec方法创建一个本机进程,并返回Process子类的一个实例,该实例可用来控制进程并获得相关信息。

 

结合1、2点理解:第一,很显然Process不能new一个(因为是个抽象类),所以一般[当然也可以继承此方法重写里面的abstract方法来实例化]靠以上两个方法创建实例;第二,控制进程是指可以使用destroy方法来杀掉子进程和使用waitFor方法是当前进程等待[如有必要,一直要等到由改Process对象表示的进程已经终止---JDK1.6];第三,获得相关信息是指可以通过getErrorStream、getInputStream、和getOutputStream三个方法获取子进程的错误流、输入流、输出流。

 

【创建进程的方法可能无法针对某些本机平台上的特定进程很好地工作,比如,本机窗口进程,守护进程,Microsoft Windows 上的 Win16/DOS 进程,或者 shell 脚本。创建的子进程没有自己的终端或控制台。它的所有标准 io(即 stdin、stdout 和 stderr)操作都将通过三个流 (getOutputStream()、getInputStream() 和 getErrorStream()) 重定向到父进程。父进程使用这些流来提供到子进程的输入和获得从子进程的输出。因为有些本机平台仅针对标准输入和输出流提供有限的缓冲区大小,如果读写子进程的输出流或输入流迅速出现失败,则可能导致子进程阻塞,甚至产生死锁。】---JDK1.6的其他解释

 

二、对于Runtime

1、Runtime之前只是获得java虚拟机内存的时候用过几次。

2、Runtime.getRuntime().exec方法可以在java中执行外部程序。

关于exec方法的几个版本和JDK1.6的解释:

exec(String command),单独的进程中执行指定的字符串命令。

exec(String[] cmdarray),单独的进程中执行指定的命令和变量。

exec(String[] cmdarray, String[] envp), 在指定环境的独立进程中执行指定命令和变量。 

exec(String[] cmdarray, String[] envp, File dir),在指定环境和工作目录的独立进程中执行指定的命令和变量。 

exec(String command, String[] envp) ,在指定环境的单独进程中执行指定的字符串命令。 

exec(String command, String[] envp, File dir),在有指定环境和工作目录的独立进程中执行指定的字符串命令。

一般我们只关心exec方法的第一种,第四和第六种可以传递目录地址,是执行此命令的目录,有的程序使用这个比较方便。

 

三、cmd命令

cmd /c dir 是执行完dir命令后关闭命令窗口。

其他版本:

cmd /k dir 是执行完dir命令后不关闭命令窗口。

cmd /c start dir 打开一个新窗口执行dir命令,原窗口会关闭。

cmd /k start dir 打开一个新窗口执行dir命令,原窗口不会关闭。

 

四、output为执行命令后的输出信息,如果想进行分析,或者显示使用。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值