Java:读取方法的输出

时间:2013-04-03 09:30:10

标签: java

我使用反射在运行时执行方法。但是当方法没有返回任何内容时,我想读取被调用方法打印的最后一行并将其存储在String变量中。有人可以帮助我解决这个问题,因为我完全可以解决这个问题。 目前我正在使用System.setOut。有没有更好的方法来做到这一点。以下是我目前使用的代码。

PrintStream originalOutStream = System.out; 
System.setOut(new PrintStream(new FileOutputStream("D:/myFile.txt")));
smething(2);// a method which prints something
System.setOut(originalOutStream);
FileInputStream fr = new FileInputStream("D:/myFile.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fr));
String strLine;
//Read File Line By Line
while ((strLine = br.readLine()) != null)   {
.. Do the necessary processing
 }

2 个答案:

答案 0 :(得分:0)

一种解决方案是将方法调用包装在另一个中,暂时更改System.out流并在之后检查输出。

它应该是这样的:

void wrapper( /* Parameter list */) {
  /* change System.out
     call methods
     take System.out to previous state
  */
}

答案 1 :(得分:0)

根据我能理解的内容,您希望从方法中返回一个字符串。执行此操作的最佳方法是使用String方法:

public String finalString = someString();
public String someString() {
  return "foo";
}

请澄清您的问题并添加您正在使用的代码。

编辑:打印到控制台的最后一件事是什么?

public class Foo {
  public String lastOut = "";

  public static void main(String[] args) {
    lastString = "red " + Integer.parseInt(args[0]);
    System.out.println(lastString);
  }
}

也许那样的事情?或者,您可以使用ArrayDeque并继续添加发送到双端队列的最后一个字符串。对我而言,这似乎是一种更实际的解决方法,但这可能不是你想要的......

-Cork