2014-01-09 33 views
0

我在java程序中调用jar。内层jar返回一些输出。我应该如何阅读并在以下程序中显示? 我能够成功调用jar但如何显示输出?调用并返回一个jar的输出到另一个java程序

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(); 
     } 
} 
} 

输出:完成...... 我想打印输出罐子以及

+2

您是否尝试过从流中读取数据? – Reimeus

+1

您可以将输入流对象转换为字符串。 http://stackoverflow.com/questions/309424/read-convert-an-inputstream-to-a-string –

+0

@Reimeus:我只是sysout的变量,但没有运气.. – logan

回答

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); 
1

随着线

InputStream in = proc.getInputStream(); 
InputStream err = proc.getErrorStream(); 

你已经在路上。

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

只是为了说清楚:标准输出和标准错误流在应用程序中通过分别打印System.outSystem.err(分别)的调用来访问。因此,如果您在另一个应用程序中有 - 例如 - System.out.println("Hello world"),您将检索输入流中的相应字节(请参阅下文),您可以使用上述代码段的变量in来引用输入流。

通常情况下,您对字节不感兴趣,但您想要检索已放入输出的字符串。所以你必须将字节转换为一个字符串。为此,您通常必须提供编码(Java类为Charset)。事实上,平台的默认编码在这种情况下起作用。

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

BufferedReader outReader = new BufferedReader(new InputStreamReader(proc.getInputStream())); 

上面mntioned平台默认编码时,当不指定任何字符在InputStreamReader的构造设置。

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

while(outReader.ready()) 
    System.out.println(outReader.readLine()) 

一个字:如果你将数据写入到标准输出流,这个流仅刷新,当也被写入一个换行符。这通过致电System.out.println(...)完成。这就是为什么你必须阅读读者的全部内容的原因。

你现在能组装一些代码来读出其他应用程序的输出吗?如果没有,你可能应该发表另一个问题。

+0

+1谢谢你的时间。请看我的回答。同样的方式 – logan

+0

好的发现。 :-) – Seelenvirtuose

相关问题