largeQ
这是一个名为ConsoleOutputCapturer的实用程序类。它允许输出转到现有控制台,但在幕后仍会捕获输出文本。您可以使用开始/停止方法控制要捕获的内容。换句话说,调用start开始捕获控制台输出,完成捕获后,您可以调用stop方法,该方法返回一个String值,该值保存两次start-stop调用之间的时间窗口的控制台输出。此类不是线程安全的。import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.OutputStream;import java.io.PrintStream;import java.util.Arrays;import java.util.List;public class ConsoleOutputCapturer { private ByteArrayOutputStream baos; private PrintStream previous; private boolean capturing; public void start() { if (capturing) { return; } capturing = true; previous = System.out; baos = new ByteArrayOutputStream(); OutputStream outputStreamCombiner = new OutputStreamCombiner(Arrays.asList(previous, baos)); PrintStream custom = new PrintStream(outputStreamCombiner); System.setOut(custom); } public String stop() { if (!capturing) { return ""; } System.setOut(previous); String capturedValue = baos.toString(); baos = null; previous = null; capturing = false; return capturedValue; } private static class OutputStreamCombiner extends OutputStream { private List outputStreams; public OutputStreamCombiner(List outputStreams) { this.outputStreams = outputStreams; } public void write(int b) throws IOException { for (OutputStream os : outputStreams) { os.write(b); } } public void flush() throws IOException { for (OutputStream os : outputStreams) { os.flush(); } } public void close() throws IOException { for (OutputStream os : outputStreams) { os.close(); } } }}