`
liyixing1
  • 浏览: 958797 次
  • 性别: Icon_minigender_1
  • 来自: 江西上饶
社区版块
存档分类
最新评论

java Runtime.exec方法详解

阅读更多



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

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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics