Перенаправить вывод консоли в строку в java

У меня есть одна функция, тип возврата которой VOID, и она печатается непосредственно на консоли.

Однако мне нужен этот вывод в строке, чтобы я мог работать над ним.

Поскольку я не могу вносить какие-либо изменения в функцию с типом возвращаемого значения, это VOID, поэтому я должен перенаправить этот вывод в строку.

Как я могу перенаправить его в JAVA?

Существует много вопросов, касающихся перенаправления stdout на строку, но они перенаправляют только входные данные, полученные от пользователя, а не вывод некоторых функций …

Если функция печатает на System.out , вы можете System.setOut этот вывод с помощью метода System.setOut для изменения System.out чтобы перейти к предоставленному вами PrintStream . Если вы создаете PrintStream подключенный к ByteArrayOutputStream , вы можете PrintStream вывод в виде String .

Пример:

  // Create a stream to hold the output ByteArrayOutputStream baos = new ByteArrayOutputStream(); PrintStream ps = new PrintStream(baos); // IMPORTANT: Save the old System.out! PrintStream old = System.out; // Tell Java to use your special stream System.setOut(ps); // Print some output: goes to your special stream System.out.println("Foofoofoo!"); // Put things back System.out.flush(); System.setOut(old); // Show what happened System.out.println("Here: " + baos.toString()); 

Эта программа выводит только одну строку:

  Here: Foofoofoo! 

Вот class утилиты ConsoleOutputCapturer. Он позволяет выводить выход на существующую консоль, однако позади сцены сохраняется захват выходного текста. Вы можете управлять захватом с помощью методов старт / стоп. Другими словами, вызовите начало запуска захвата вывода консоли, и как только вы закончите захват, вы можете вызвать метод stop, который возвращает значение String, содержащее вывод консоли для временного windows между вызовами start-stop. Однако этот class не является streamобезопасным.

 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(); } } } } под 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(); } } } } 
  • .htaccess redirect без изменения адресной строки
  • Как получить URL-адрес реферера в действии ASP.NET MVC?
  • Как перенаправить URL браузера пользователя на другую страницу в Nodejs?
  • Как передать атрибуты модели из одного controllerа Spring MVC другому controllerу?
  • http до https через .htaccess
  • htaccess перенаправляет для не-www как http, так и https
  • Как выполнять динамические переадресации URL в Struts 2?
  • Давайте будем гением компьютера.