Java程序执行Cmd指令所遇问题记录及解决方案
这篇是有关在编写Java程序执行Cmd指令时所遇到的问题记录,其中有一些是个人的理解,如有问题望不吝赐教,感谢❤
Windows命令提示符(cmd.exe)是WindowsNT下的一个用于运行Windows控制面板程序或某些DOS程序的shell程序
1.执行Cmd命令的两种方式
(1)RunTime.getRunTime().exec(多种重载方式)-会得到一个Process对象通过其start()方法开启一个新进程以执行输入的指令。
这种方法就不多说了,最后这种形式还是用到第二种方式的方法(JavaApi文档中也推荐使用第二种方式去创建一个Process对象):
*@seeProcessBuilder *@since1.3 */ publicProcessexec(String[]cmdarray,String[]envp,Filedir) throwsIOException{ returnnewProcessBuilder(cmdarray) .environment(envp) .directory(dir) .start(); }
(2).newProcessBuilder().command(指令)
2.获取执行指令后的输出:
在这里就遇到点问题,
上面两种方式执行Windows自带的命令都没有什么问题(像Ping、Ipconfig)。但是当执行像“Java-version”这样的外部命令,其输出通过getInputStream()方法是拿不到的。
后来是通过参考网上资料,采用将子进程的输出重定向到文件中,再从文件中读取内容的方法:
//外部程序的输出放到了错误信息输出流中,不将错误信息流输出到文件话,输出信息就看不到了