1
A
回答
3
我假设你通过任何的ProcessBuilder或的Runtime.exec(调用其他程序)都返回其具有方法Process对象getInputStream()和getErrorStream(),它们允许您监听其他进程的输出和错误(stdout,stderr)流。
考虑下面的代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class Test {
public static void main(String[] args){
Test t = new Test();
t.start();
}
private void start(){
String command = //Command to invoke the program
ProcessBuilder pb = new ProcessBuilder(command);
try{
Process p = pb.start();
InputStream stdout = p.getInputStream();
InputStream stderr = p.getErrorStream();
StreamListener stdoutReader = new StreamListener(stdout);
StreamListener stderrReader = new StreamListener(stderr);
Thread t_stdoutReader = new Thread(stdoutReader);
Thread t_stderrReader = new Thread(stderrReader);
t_stdoutReader.start();
t_stderrReader.start();
}catch(IOException n){
System.err.println("I/O Exception: " + n.getLocalizedMessage());
}
}
private class StreamListener implements Runnable{
private BufferedReader Reader;
private boolean Run;
public StreamListener(InputStream s){
Reader = new BufferedReader(new InputStreamReader(s));
Run = true;
}
public void run(){
String line;
try{
while(Run && (line = Reader.readLine()) != null){
//At this point, a line of the output from the external process has been grabbed. Process it however you want.
System.out.println("External Process: " + line);
}
}catch(IOException n){
System.err.println("StreamListener I/O Exception!");
}
}
}
}
0
把握这个例子:
// Try these charsets for encoding text file
String[] csStrs = {"UTF-8", "UTF-16BE", "UTF-16LE", "UTF-16", "GB2312", "GBK", "BIG5"};
String outFileExt = "-out.txt"; // Output filenames are "charset-out.txt"
// Write text file in the specified file encoding charset
for (int i = 0; i < csStrs.length; ++i) {
try (OutputStreamWriter out =
new OutputStreamWriter(
new FileOutputStream(csStrs[i] + outFileExt), csStrs[i]);
BufferedWriter bufOut = new BufferedWriter(out)) { // Buffered for efficiency
System.out.println(out.getEncoding()); // Print file encoding charset
bufOut.write(message);
bufOut.flush();
} catch (IOException ex) {
ex.printStackTrace();
}
}
// Read raw bytes from various encoded files
// to check how the characters were encoded.
for (int i = 0; i < csStrs.length; ++i) {
try (BufferedInputStream in = new BufferedInputStream( // Buffered for efficiency
new FileInputStream(csStrs[i] + outFileExt))) {
System.out.printf("%10s", csStrs[i]); // Print file encoding charset
int inByte;
while ((inByte = in.read()) != -1) {
System.out.printf("%02X ", inByte); // Print Hex codes
}
System.out.println();
} catch (IOException ex) {
ex.printStackTrace();
}
}
// Read text file with character-stream specifying its encoding.
// The char will be translated from its file encoding charset to
// Java internal UCS-2.
for (int i = 0; i < csStrs.length; ++i) {
try (InputStreamReader in =
new InputStreamReader(
new FileInputStream(csStrs[i] + outFileExt), csStrs[i]);
BufferedReader bufIn = new BufferedReader(in)) { // Buffered for efficiency
System.out.println(in.getEncoding()); // print file encoding charset
int inChar;
int count = 0;
while ((inChar = in.read()) != -1) {
++count;
System.out.printf("[%d]'%c'(%04X) ", count, (char)inChar, inChar);
}
System.out.println();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}}
相关问题
- 1. 获取I /从另一个java程序运行Java程序Ø
- 2. 从另一个正在运行的Java应用程序中捕获异常
- 3. 从正在运行的Java程序拦截输出
- 4. 在Java程序中运行另一个Java程序并获取输出/发送输入
- 5. 编译,运行并获得java程序中的输出java程序
- 6. HOWTO呼叫外部程序并获得它的从另一个程序输出
- 7. 运行的.jar从java程序参数,并得到输出
- 8. 如何从另一个java程序运行java程序?
- 9. 从另一个Java程序运行java程序
- 10. 无法从另一个Java程序运行java程序
- 11. 无法从运行java程序的shell脚本获取输出
- 12. 正在运行另一个程序的调试程序
- 13. 从另一个java程序运行RMI程序
- 14. Java:最后运行另一个程序
- 15. 从另一个功能获得的输出值在C
- 16. 捕获另一个C#程序的c#可执行输出
- 17. 如何从另一个java程序运行java代码?
- 18. 从另一个程序或终端中断正在运行的C++程序
- 19. 从所有正在运行的应用程序获得PID(Android)
- 20. 从另一个Java控制台获取输出到我的应用程序
- 21. Java线程:运行一个简单的java线程程序输出混淆
- 22. 为什么我从这个Java程序获得以下输出?
- 23. 如何停止另一个正在运行的进程java android
- 24. 读取另一个正在运行的.NET程序的属性
- 25. Java运行时执行C语言程序得不到输出
- 26. 在另一个程序中运行Java程序会给出错误
- 27. 在另一个正在运行的Java程序中访问实例?
- 28. 如何从java中的另一个正在运行的线程访问方法
- 29. java中的eclipse插件开发:如何从另一个运行的程序运行一个运行配置?
- 30. 在程序运行时可以获取程序的输出吗?
[这](http://stackoverflow.com/questions/5389632/capturing-contents-of-standard-output-in-java)其他计算器问题可能是你在找什么。 –
@DavidWallace OP不知道该怎么办?因此在这里发布的问题。如果有些身体不知道那么它没用,问你试过什么? – SpringLearner
@javaBeginner - 帮助那些没有尝试为自己编写代码的人不是Stack Overflow的作用。这个想法是在遇到困难时回答具体问题,而不是从完全空白的板岩开发代码。检查常见问题。 –