Java执行外部命令行程序,获取命令行输出
一般来说,使用Runtime.getRuntime().exec 来执行一个外部的exe程序,通过proc.getErrorStream()和proc.getInputStream()就可以获得该程序的输出,大多数程序都可以成功获得输出。
但是,这次遇到的例子比较特殊,手动在命令行里执行caption2ass会得到以下内容:
我尝试用getErrorStream()或getInputStream()获得caption2ass.exe在命令行中的输出,却无法得到命令行中的内容。
主程序:
Runtime run = Runtime.getRuntime();
Process proc = run.exec("caption2ass.exe");
StreamGobbler errorGobbler = new StreamGobbler(
proc.getErrorStream(), "GBK", "ERR", System.err);
StreamGobbler outputGobbler = new StreamGobbler(
proc.getInputStream(), "GBK", "OUT", System.out);
errorGobbler.start();
outputGobbler.start();
int exitVal = proc.waitFor();
System.out.println("ExitValue: " + exitVal);
StreamGobbler.java :
public class StreamGobbler extends Thread {
InputStream in;
String charsetName;
String type;
PrintStream out;
StreamGobbler(InputStream inputStream, String charsetName, String type, PrintStream out) {
this.in = inputStream;
this.charsetName = charsetName;
this.type = type;
this.out = out;
}
@Override
public void run() {
try {
InputStreamReader isr = new InputStreamReader(in, charsetName);
char[] cbuf = new char[256];
int len = -1;
while ( -1 != (len=isr.read(cbuf))){
out.print(Arrays.copyOf(cbuf, len));
}
} catch (IOException ioe) {
ioe.printStackTrace();
} finally {
IOUtils.closeQuietly(in);
}
}
}
caption2ass下载地址 http://pan.baidu.com/s/1nuCClXR 欢迎测试
相关阅读:
Promise
vue新手,通过路由切换两个静态组件,如何互相传值?
PHP数组使用 php_encode 后再使用 JSON.parse 转换成js对象会报错(之前数组中有个值是 json字符串)
如何用php实现一个账号不能多个用户同时登陆?
vue开发项目,创建出来的html,页面或许不到元素,
为什么函数使用use会报错?
用php程序网站后台的网站输上域名出现500内部服务器错误是什么原因?
正则表达式匹配html的问题。
css如何让一张图平铺width 100%;并且高度等于整个手机屏幕的50%?
spring security oauth2 sso 怎么弄
使用 min-height:calc( 100vh - 64px )问题
浏览器默认滚动条箭头样式的修改
如何用php丟一個json到指定的http?
avalon2.2.4 在IE下渲染不稳定
extjs官方在线demo究竟怎么看源码
netstat 命令写-a不是很明白?
无法使用phantomjs正确解析网站
用vue-cli构建的项目,如何引用adminlte这样的三方UI库
chrome下如何将字符串输入在多行
如何给Vue的data中的数组赋值?