参考:https://blog.youkuaiyun.com/tiantang_1986/article/details/51219916
https://blog.youkuaiyun.com/zhaohong_bo/article/details/89552188
api:
此方法可调用系统的cmd(windos)命令或bash(linux)命令,或者运行其他进程。参数cmdarray[]是某条命令的拼接,envp是设置临时环境变量,dir是工作目录。
运行其他进程:
public static void main(String[] args) {
Process proc;
try {
proc = Runtime.getRuntime().exec(new String[]{"java","Test"},new String[]{"classpath=E:\\"});
// proc = Runtime.getRuntime().exec("cmd /c dir");
BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream(),"GBK"));
String line = null;
while ((line = in.readLine()) != null) {
System.out.println(line+"zzzzzzzzz!");
}
in.close();
proc.waitFor();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Test.class
public static void main(String[] args) {
System.out.println("Test...run");
}
其中Runtime.exec() 因为不是cmd或shell环境,因此无法直接调用dir等命令。若要调用命令行下的命令如下格式 cmd -c "cmd命令"。
类Process代表子进程(E:\Test.class)。
这里对System.out.println()这个函数有了新的认识,以前认为此函数的作用是向控制台输出。看了System.out.println()函数的解释,并结合此代码可知。System.out.println()只是向终端输出数据。
个人对System.out.println()函数的理解是,它向调用它的进程传输数据。如在cmd窗口(父进程)中调用java程序,jvm虚拟机(子进程)就把此数据传向CMD进程(父进程)。在idea调用java程序时,虚拟机就把数据传向了idea。当用java代码(父进程)Runtime.getRuntime().exec()调用java程序时(子进程),System.out.println()就把数据传给了父进程,如上。