1.关于CMD(为了让exec更正常的运行,往往会通过cmd来启动命令)
cmd /c dir 是执行完dir命令后关闭命令窗口。
cmd /k dir 是执行完dir命令后不关闭命令窗口。
cmd /c start dir 会打开一个新窗口后执行dir指令,原窗口会关闭。
cmd /k start dir 会打开一个新窗口后执行dir指令,原窗口不会关闭。
其中/C会阻塞java的
线程,因为java需要等待进程结束
/k的话它怎么都获取不到输出的信息,无论是输入流还是
错误输入流都不行!
/k还没测试是不是会阻塞。
2.调用多个命令,这个学一下bat
脚本,就知道了,bat脚本(exec 其实也算是bat的一个环境,),在bat中可以通过&&把多个命令拼接一起运行,bat的环境其实是通过cmd.exe命令获取到的。所以前面必须通过cmd
class="bat" name="code">exec("cmd /c set CLASSPATH=D:\\java\\test && javac D:\\java\\java.java && java D:\\java\\ com.a.A")
3.参数化
第一个参数cmdarray——包含所调用命令极其参数的数组。
例如:shutdown -s -t 3600——在一小时后自动关机命令
我们可以构建这样的一个数组:String arr[] = {"shutdown","-s","-t","3600"};
数组第一个元素“shutdown”是命令,其后的三个-s、-t、3600都是参数,然后直接将这个数组注入exec方法即可。
需要注意的是,在调用这个方法时我们不能将命令和参数放在一起——String arr[] = {"shutdown -s -t 3600"};
然后是第二个参数:envp——
字符串数组,其中每个元素的环境变量的设置格式为 name=value,如果子进程应该继承当前进程的环境,或该参数为null。
String envp[] = {"CLASSPATH=D://"}
第三个参数,运行环境目录,对应的就是java的System.getProperty("user.dir")
Process process = Runtime.getRuntime().exec(new String[]{"shutdown","-s","-t","3600"}, null, new File("D:/TEST"));
- 大小: 16.9 KB
- 大小: 11 KB