0

我正在使用反射在运行时执行方法。但是,当该方法不返回任何内容时,我想读取被调用方法打印的最后一行并将其存储在 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
 }
4

2 回答 2

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并继续添加发送到双端队列的最后一个字符串。对我来说,这似乎是一种更实际的解决方法,但这可能不是你想要的......

-软木

于 2013-04-03T09:40:06.930 回答
0

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

它应该如下所示:

void wrapper( /* Parameter list */) {
  /* change System.out
     call methods
     take System.out to previous state
  */
}
于 2013-04-03T09:38:04.473 回答