Консольные приложения на Java: System.out - это еще путь? - PullRequest
4 голосов
/ 03 марта 2010

Использование System.out (и связанного с ним) всегда казалось неуклюжим из-за открытого поля, и теперь с последними Netbeans дает явную подсказку «Требуется удалить».

Отсюда мой вопрос: System.out по-прежнему является предпочтительным способом записи на консоль или есть какой-либо другой API, который должен быть предпочтительным?

РЕДАКТИРОВАТЬ: Я не хочу это для ведения журнала, но для простого консольного приложения. Что-то вроде ps, которое выводит запущенные процессы на консоль.

Ответы [ 4 ]

11 голосов
/ 03 марта 2010

В команде, предназначенной для запуска из командной строки, (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 - В зависимости от характера вывода на консоль, это может быть именно тем, что хочет пользователь. Но программист приложения должен принять это во внимание.

4 голосов
/ 03 марта 2010

Да, в основном по одной причине: другого способа записи на консоль нет. Даже если вы используете каркас журналирования, он в конечном итоге будет использовать System.out.

0 голосов
/ 03 марта 2010

Просто используйте каркас журналирования и вместо System.out войдите в систему на уровне отладки, а в среде разработки (НЕ производственной) установите выходные данные для консоли и уровень логирования для отладки

0 голосов
/ 03 марта 2010

Я бы не советовал писать прямо на консоль. Используя каркас log4j (или similiar), вы можете настроить, куда вы хотите, чтобы вывод выводился без изменения вашего кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...