2013-04-03 39 views
0

我正在使用反射來在運行時執行方法。但是,當方法不返回任何內容時,我想讀取被調用方法打印的最後一行,並將其存儲在String變量中。有人可以幫我解決這個問題,因爲我處於完全修復的狀態。 目前我正在通過使用System.setOut來做到這一點。有沒有更好的方式來做到這一點。以下是我目前使用的代碼。Java:讀取方法的輸出

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

請貼,你已經嘗試了示例代碼。 –

+2

你想從STDOUT中讀取最後一行,對吧?我不確定它是否可能,但它與反射無關,只是I/O。 – Andy

+0

您嘗試調用的方法是否事先已知?有沒有可能這種方法既不打印也不返回任何東西? –

回答

0

一個解決方案是包裝內的另一個方法調用,其暫時改變System.out流和事後檢驗輸出。

它應該是這樣的:

void wrapper(/* Parameter list */) { 
    /* change System.out 
    call methods 
    take System.out to previous state 
    */ 
} 
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

+0

我不想從方法返回一個字符串。我想讀取被調用的方法的輸出。 – KJoshi

+0

解釋一點點。我不確定我明白你想要什麼? – TheBrenny