В команде, предназначенной для запуска из командной строки, (IMO) целесообразно использовать System.out
и System.err
для вывода и для сообщений об ошибках, которые пользователь может разумно ожидать понять. Если вы запускаете свое приложение из подходящей оболочки или скрипта, потоки System.out
и / или System.err
могут быть перенаправлены в файлы или другой процесс в конвейере, но это выбор пользователя.
В JDK 1.6 и более поздних версиях java.io.Console
предоставляет вашему приложению доступ к консоли. Он не прописан в Javadoc, но я подозреваю, что java.io.Console
открывает свежий поток для консоли и, следовательно, не может быть перенаправлен. (Моральный эквивалент открытия «/ dev / tty» в окне старой школы UNIX.) Вы должны использовать это, только если ваше приложение хочет быть уверенным, что оно общается с пользователем, без какой-либо возможности перенаправления; например при запросе и чтении пароля.
Обратите внимание, что Console
не гарантированно работает. Действительно, замечено, что он не работает, когда вы запускаете приложение из Eclipse ... и, возможно, других IDE.
Однако, если ваше приложение является командой с графическим интерфейсом, и особенно если оно предназначено для запуска в качестве автоматической службы, вам следует избегать «записи в консоль», поскольку:
- потоки консоли (
System.{out,err}
или java.io.Console
) могут быть подключены ни к чему, или
- пользователь может не заметить вывод консоли, потому что окно консоли скрыто 1 или
- вывод на консоль может раздражать пользователя, особенно если ваше приложение не предоставляет способа его подавления.
1 - В зависимости от характера вывода на консоль, это может быть именно тем, что хочет пользователь. Но программист приложения должен принять это во внимание.