java执行命令行,以及解决卡死问题

java

java可以执行本地命令行,但是有一个坑,命令执行后,已经执行完毕,但是卡死不返回,这是因为:

命令会返回两个输出流,正确的返回流,和错误的返回流

一般程序的做法是先循环读正确的返回流,再读错误的返回流,当正确的返回流读不完的时候,有可能错误的返回流已经占满了缓存,所以导致了卡死,

解决办法是:

1.单独起一个线程读取错误流,这样的情况下,错误流比较不好保存

2.使用ProcessBuild类,这个类可以把错误流重定向到正确流,这样只读一个流就可以了,不论正确或错误,都能读到返回,下面是个例子

ProcessBuilder pb;

Process process = null;

BufferedReader br = null;

StringBuilder resMsg = null;

OutputStream os = null;

String cmd1 = "sh";

try {

pb = new ProcessBuilder(cmd1);

pb.redirectErrorStream(true);

process = pb.start();

os = process.getOutputStream();

os.write(command.getBytes());

os.flush();

os.close();

resMsg = new StringBuilder();

// get command result

if (isNeedResultMsg) {

br = new BufferedReader(new InputStreamReader(process.getInputStream()));

String s;

while ((s = br.readLine()) != null) {

resMsg.append(s + "\n");

}

resMsg.deleteCharAt(resMsg.length()-1);

result = process.waitFor();

}

} catch (IOException e) {

e.printStackTrace();

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

if (os != null) {

os.close();

}

if (br != null) {

br.close();

}

} catch (IOException e) {

e.printStackTrace();

}

if (process != null) {

process.destroy();

}

}

return resMsg.toString();

via:https://my.oschina.net/u/222749/blog/2965712

以上是 java执行命令行,以及解决卡死问题 的全部内容, 来源链接: utcz.com/z/389659.html

回到顶部