我在java程序中调用jar。内部jar返回一些输出。我应该如何在以下程序中阅读和显示? 我能够成功调用jar但是如何显示输出?
import java.io.InputStream;
public class call_xml_jar {
public static void main(String argv[]) {
try{
// Run a java app in a separate system process
Process proc = Runtime.getRuntime().exec("java -jar xml_validator.jar");
// Then retreive the process output
InputStream in = proc.getInputStream();
InputStream err = proc.getErrorStream();
System.out.println("Completed...");
}
catch (Exception e) {
e.printStackTrace();
}
}
}
输出已完成... 我想打印jar输出
答案 0 :(得分:1)
使用
行InputStream in = proc.getInputStream();
InputStream err = proc.getErrorStream();
你已经在路上了。
这些流使您可以访问其他应用程序的标准输出和标准错误流(分别)。顺便说一下:通过调用getInputStream()来检索其他应用程序的标准输出流,因为这是当前应用程序的视图;您正在输入其他应用程序的数据。
只是说清楚:通过打印System.out
和System.err
(分别)来调用应用程序中的标准输出和标准错误流。
因此,如果您在另一个应用程序中有 - 例如 - System.out.println("Hello world")
,您将使用上述变量in
检索输入流中的相应字节(见下文)代码段。
通常,您对字节不感兴趣,但是您想要检索已放入输出的String。所以你必须将字节转换为String。为此,您通常必须提供编码(Java类为Charset
)。实际上,平台的默认编码在这种情况下有效。
最简单的方法是将输入流包装在缓冲的阅读器中:
BufferedReader outReader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
当未在InputStreamReader
的构造函数中指定任何字符集时,使用上面提到的平台的默认编码。
BufferedReader知道一个方法readLine(),你必须使用它来获取所有其他应用程序的输出。
while(outReader.ready())
System.out.println(outReader.readLine())
关于刷新的一个词:如果您将数据写入标准输出流,则只有在写入换行符时才会刷新此流。这是通过调用System.out.println(...)
来完成的。这就是为什么你必须阅读读者的全部内容的原因。
您现在能够组装一些读取其他应用程序输出的代码吗?如果没有,你可能会发布另一个问题。
答案 1 :(得分:0)
我自己解决了..这是我的解决方案......
// Then retreive the process output
InputStream in = proc.getInputStream();
InputStream err = proc.getErrorStream();
System.out.println("Completed...");
InputStreamReader is = new InputStreamReader(in);
StringBuilder sb=new StringBuilder();
BufferedReader br = new BufferedReader(is);
String read = br.readLine();
while(read != null) {
//System.out.println(read);
sb.append(read);
sb.append("\n");
read =br.readLine();
}
System.out.println(sb);