1
首先,我知道,如果你想啓動一個進程,並從它那裏得到的控制檯輸出,可以使用例如下面的代碼:Java程序如何完全讀取自己的控制檯輸出?
ProcessBuilder builder = new ProcessBuilder(command);
builder.redirectErrorStream(true);
Process proc;
proc = builder.start();
InputStreamReader isr = new InputStreamReader(proc.getInputStream());
BufferedReader reader = new BufferedReader(isr);
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
但是如果我想獲得全控制檯輸出從目前運行的Java程序?是否有可能閱讀它而不丟失任何東西?我確定用於在控制檯中顯示文本的程序在某些地方使用System.out.println()
,大多數情況下它使用java.util.logging.Logger
的許多實例,也可能在其他某個地方使用其他方法。
順便說一句,Logger
類到底是簡單地使用System.out
來打印文本還是使用任何其他特殊的方法來記錄?
無論如何,我可以以某種方式聽取所有這些?
在此先感謝
也許你可以在內存的實例中搜索輸出到控制檯並將文本重定向到你自己的流/讀者 – kukis
我擔心你爲什麼要這麼做,或者你的上下文是什麼認爲這是必要的。大多數程序員會考慮搞亂輸出流是一個壞主意。坦率地說,下面關於重定向控制檯輸出的答案是一個更好的方向,但我們可能需要更多的上下文。 – markspace
Logger類通常不使用System.out。根據配置,'Logger'類可以使用'ConsoleHandler',它將輸出發送到'System.err'。但是記錄器只委託處理程序,它本身不使用任何輸出方法。 – markspace