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