Java 在运行时运行ProcessBuilder,仅获取BufferStreamReader的一部分
我在运行时使用ProcessBuilder在另一个jar中运行jar文件时遇到了问题,问题是,我只得到流输出的一部分,这里是我代码的一部分Java 在运行时运行ProcessBuilder,仅获取BufferStreamReader的一部分,java,process,processbuilder,Java,Process,Processbuilder,我在运行时使用ProcessBuilder在另一个jar中运行jar文件时遇到了问题,问题是,我只得到流输出的一部分,这里是我代码的一部分 String[] command = { "java","-cp",fileJar.getAbsolutePath(), "a.b.c.Class","-x",fileGram.getAbsolutePath(), "-o",GIFdir.getAbsolutePa
String[] command = { "java","-cp",fileJar.getAbsolutePath(),
"a.b.c.Class","-x",fileGram.getAbsolutePath(),
"-o",GIFdir.getAbsolutePath(),"/","-d","xzf","-ver"};
ProcessBuilder probuilder = new ProcessBuilder( command );
pbaw = probuilder.start();
try {
String line;
BufferedReader input = new BufferedReader(new
InputStreamReader(pbaw.getInputStream()));
while ((line = input.readLine()) != null) {
System.out.println(line);
}
input.close();
pbaw.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
}
在commad中,我的意思是,从jar应用程序中的fileJar运行a.b.c.Class,选项为:-x,jar应用程序中的fileGram,-o,GIFdir目录,-d,xyz,-v。我在命令控制台中获得了完整的输出,但在jar应用程序中使用process builder时,只有部分输出,为什么会发生这种情况,请帮助我 如果没有更多细节,这个问题很难回答。警告:根据我的经验,
ProcessBuilder
和Process
很难很好地使用。总是一个角落的案件潜伏着
1) 您可以说:在控制台上运行命令很好而且很顺利
嗯。使用此命令在命令行中再次运行两次:
jarxyz1>stdout.txt
jarxyz2>stderr.txt
Process.getErrorStream()
从STDERR读取所有字节
3) 最后,尝试从STDOUT和STDERR读取字节而不是字符
...
{
...
String stdout = readInputStream(process.getInputStream());
String stderr = readInputStream(process.getErrorStream());
...
}
...
public static String readInputStream(InputStream inputStream) {
StringBuilder sb = new StringBuilder();
byte[] buffer = new byte[8192];
Charset cs = Charset.defaultCharset(); // or something different
while (true) {
int readCount = inputStream.read(buffer);
if (-1 == readCount) {
break;
}
String x = new String(buffer, 0, readCount, cs);
sb.append(x);
}
String y = sb.toString();
return y;
}
部分输出是否可以发送到stderr?有两个输出流—一个用于标准输出,一个用于错误输出—你们的意思是有两个输出流,在控制台上运行命令很好,很流畅,但在应用程序中并没有,我只得到了部分输出,为什么?他的意思是有两个流。请参阅ProcessBuilderJavadoc。一个输出流和一个错误流。是的,你们都是对的,我在让fileGram.getAbsolutePath()运行时出错了,在我使用getErrorStream检查之后,谢谢大家,你们是最好的。