调用jar并将其输出返回给另一个java程序
我在java程序中调用jar。内部jar返回一些输出。我应该如何阅读和显示以下程序? 我能够成功地调用jar,但是如何显示输出呢调用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
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谢谢你的时间。请看我的答案。。同样的方式