[英]Reading System.out.println(Text) from another class
基本上我正在創建一個應該從另一個類讀取一系列整數的類。
另一個類是System.out。按以下順序打印整數:
i i i i
i i i i
... etc.
所以我基本上想要創建一個String文件或其他任何工作,我可以在第一個類中讀取此輸出。
我很丟失,我不知道我是否應該創建一個Scanner(System.in),如果是,那該怎么辦呢。
我想這是一個非常開放的問題,所以請提前道歉。
重定向System.out
是一種解決方案,但這會將System.out
重定向到所有類 - 您不能(輕松)重定向此類的一個獨有的類。
也許這個“其他類”在您的控制之下,您可以將其視為重組代碼的機會。 所以也許你有類似的東西:
public void print(int[] values) {
// ...
System.out.println(result);
}
然后你可以將代碼更改為
public String prepareResult(int[] values) {
// ...
return result;
}
public void print(int[] values) {
System.out.println(prepareResult(values));
}
如果需要String中的輸出,請調用“prepareResult”方法。
基本上我同意那些實際上說你的設計應該改變而且“其他類”應該只准備結果然后返回它的人。
但如果這個“其他階級”不在你的控制范圍內,我會建議你以下。
如果您不熟悉API,可以使用以下提示來幫助您實現它。
public class FilterOutputStream extends OutputStream {
private OutputStream payload;
public FilterOutputStream(OutputStream payload) {
this.payload = payload;
}
public void write(int b) throws IOException {
if (isSpecialClass()) {
specialWrite(b);
} else {
payload.write(b);
}
}
public void flush() throws IOException {
payload.flush();
}
public void close() throws IOException {
payload.close();
}
public boolean isSpecialClass() {
return "MySpecialClass".equals(new Throwable().getStackTrace()[0].getClassName());
}
}
我沒有嘗試這個代碼,所以它可能包含甚至語法錯誤,但它說明了一般的想法。 我希望這有幫助。
您可以使用System.setOut()和System.setErr()在不同的流上重定向標准輸出(然后將該流傳輸到您的輸入)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.