调用jar并将其输出返回给另一个java程序

调用jar并将其输出返回给另一个java程序,java,jar,Java,Jar,我在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 = Runt

我在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输出

我自己解决了。。这是我的解决方案

// 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);
用台词

InputStream in = proc.getInputStream();
InputStream err = proc.getErrorStream();
你已经在路上了

通过这些流,您可以访问其他应用程序的标准输出和标准错误流(分别)。顺便说一下:您可以通过调用getInputStream()来检索其他应用程序的标准输出流,因为这是您当前应用程序的视图;您正在输入其他应用程序的数据

只是想说明一下:在应用程序中,通过打印对
System.out
System.err
的调用,可以访问标准输出和标准错误流

因此,如果您在另一个应用程序中有(例如)
System.out.println(“Hello world”)
,那么您将在输入流中检索相应的字节(见下文),该字节由上述代码段的中的变量
引用

通常,您对字节不感兴趣,但希望检索已放入输出中的字符串。因此,必须将字节转换为字符串。为此,通常必须提供一个编码(该编码的Java类是
Charset
)。事实上,在这种情况下,平台的默认编码是有效的

最简单的方法是将输入流包装在缓冲读取器中:

BufferedReader outReader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
InputStreamReader
的构造函数中未指定任何字符集时,使用上述MND平台的默认编码

BufferedReader知道一个readLine()方法,您必须使用它来获取其他应用程序的所有输出

while(outReader.ready())
    System.out.println(outReader.readLine())
关于刷新的一句话:如果您将数据写入标准输出流,那么只有在写入换行符时,才会刷新该流。这是通过调用
System.out.println(…)
完成的。这就是为什么你必须从读者那里读整行的原因


您现在是否能够汇编一些代码来读取其他应用程序的输出?如果没有,您可能应该发布另一个问题。

您尝试过从流中读取数据吗?您可以将inputstream对象转换为字符串@Reimeus:我只是对变量进行了sysout,但运气不好。@Reimeus:我尝试了vinnu313的anwer,但显示语法错误@byte[]outputBytes=byte[in.available()]@贾利勒:谢谢你。。。我得到了解决方案+1谢谢你的时间。请看我的答案。。同样的方式