【JAVA技巧】ProcessBuilder类的介绍及使用
【前言】
在做一个项目的时候需要用到运行时动态执行JAVA命令,一开始的思路是运行时生成bat脚本,然后通过Runtime类的exec方法之行bat脚本,但是此方法不好的地方在于脚本执行时会弹出一个cmd程序界面框。后面在参考YANG的源码时发现了另一种运行时执行JAVA命令的方法,由此延申,了解了PorcessBuilder类的作用及用法。
【正文】
ProcessBuilder类是包下的基础类,在使用时无需导入,可以直接使用。它主要用于创建和运行各类外部程序,例如javac,java等等。
--构造方法--
它(List<String> command),它(String... command)
--常用方法--
void command(String... command) 用于将待执行命令及参数传递给它;
Process start() 执行命令并返回一个Process对象,用于获取对执行程序的输入和输出;
void directory(File base) 用于设置待执行命令的工作目录,可以不设置;
--使用技巧--
1、在使用它的时候建议将其封装一下,这样更便于使用,例如,
public class ProcessUtil {
public static void process(String... command) throws Exception {
process((File)null, command);
}
public static void process(List<String> commandList) throws Exception {
process((File)null, (String[])(new String[0]));
}
public static void process(File base, String... command) throws Exception {
ProcessBuilder processBuilder = new ProcessBuilder(new String[0]);
if (base != null) {
(base);
}
(command);
Process process = ();
......
- 添加一个input2string()方法,用于将执行程序获得的输出转换为String对象,便于输出,例如,
public static String input2str(InputStream inputStream) throws UnsupportedEncodingException {
ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
try {
int len;
while((len = (buffer)) != -1) {
(buffer, 0, len);
}
();
();
} catch (IOException var5) {
();
}
return ("utf-8");
}
【总结】
它作为一个JAVA底层类,使开发者能够与操作系统进行强大的互动,而且在使用它进行系统命令的调用时,能够在后台进行,不会有使用Runtime类时弹出cmd命令执行框的困扰,十分方便。在后面的学习当中可以进一步了解一下System类的用法。
【声明】
本文原创,文中代码及思路借鉴于yangtools源码,详情请参考yangtools源码及JAVA1.8API官方文档(/javase/8/docs/api/)。