Сброс стандартного потока вывода - PullRequest
42 голосов
/ 17 марта 2011

Я знаю, что в Java есть функция для установки стандартного потока вывода на любое определенное пользователем значение с использованием метода System.setOut.

Но есть ли способ для сброса стандартного вывода на тот, который былсохраненный ранее или тот, который является стандартным выводом?

Ответы [ 2 ]

76 голосов
/ 17 марта 2011

Вы можете получить дескриптор файла для стандарта через FileDescriptor.out. Чтобы сбросить стандартный вывод на консоль, выполните

System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));

Другой способ - просто удерживать исходный объект следующим образом:

PrintStream stdout = System.out;
System.setOut(new PrintStream(logFile));

// ...

System.setOut(stdout);                   // reset to standard output
24 голосов
/ 09 ноября 2012

Это старый вопрос, но он все время появляется в поиске Google, и я хотел его исправить. Вы можете получить его, используя класс FileDescriptor. Вызов new PrintStream(new FileOutputStream(FileDescriptor.out))) должен дать вам что-то, что печатает на стандартный вывод.

import java.io.FileDescriptor;
import java.io.FileOutputStream;
import java.io.PrintStream;


public static void main(String [] args) {
    System.err.println("error.");
    System.out.println("out.");
    System.setOut(System.err);
    System.out.println("error?");
    System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));
    System.out.println("out?");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...