Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Принципиальные различия в консольных выводах? .out.println() vs .err.println()??? 
V
    Опции темы
BlHol
Дата 8.8.2007, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 26.11.2005

Репутация: нет
Всего: нет



День добрый!

Очень часто встречаю в различных примерах  вывод на консоль как System.out.println(), так и System.err.println(). И в том и в другом случаях - вывод на консоль аргумента println(). Вопросы в следующем: 
1. в чем разница? 
2. Чем руководствоваться при выборе .err. или .out.?

Два примера:
1.
Код

     try
     {
      File dir = new File(dirName);

        if (!dir.exists())
             dir.mkdir();
             
           else
               if (!dir.isDirectory())
               {
                 System.err.println(dirName + " is not directory");
                 return;
               }





2.

Код

        try
        {
            
          String dirName = new String("F:\\my_project\\");
          String fileName = new String("char_files.txt");

          File output = new File(dirName,fileName);

          output.createNewFile();

          if (!output.isFile())
          {
          System.out.println("Creating " + output.getPath() + " failed ");
           return;        
          }

        }
        catch (IOException e)
        {
          System.out.println("Error writing the file " + e);

        }


Вот, ломаю голову чем обусловлено использование System.err.println() в первом случае и
 System.out.println() во втором?


Заранее спасибо.
С уважением.

Это сообщение отредактировал(а) BlHol - 8.8.2007, 13:07
PM MAIL   Вверх
AntonSaburov
Дата 8.8.2007, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Исторически сложилось, что существует три основных потока - "ввод", "вывод", "ошибки". in, out, err

Часто "ошибки" совмещают с выводом - ибо нормально сие. Но всегда можно изменить стандартный вывод на другой - в тот же файл или еще куда. Можно посмотреть класс System - там как раз это есть.
PM MAIL WWW ICQ   Вверх
Metal_Heart
Дата 8.8.2007, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а почему бы и нет?
**


Профиль
Группа: Участник
Сообщений: 728
Регистрация: 31.3.2005
Где: Москва

Репутация: 4
Всего: 12



Цитата(AntonSaburov @  8.8.2007,  13:44 Найти цитируемый пост)
Часто "ошибки" совмещают с выводом

это верно только для виндов, линуксоиды чаще всего эти потоки разделяют!


--------------------
 не стыдно учиться, а стыдно не учиться 
PM ICQ   Вверх
BlHol
Дата 8.8.2007, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 26.11.2005

Репутация: нет
Всего: нет



Тогда, какая разница что использовать?
PM MAIL   Вверх
AntonSaburov
Дата 8.8.2007, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Цитата(BlHol @  8.8.2007,  14:13 Найти цитируемый пост)
Тогда, какая разница что использовать?

Разница в идеологии - есть три основных потока при запуске программы, которые есть. И ими можно управлять, если очень хочется. Ибо выводить ошибки на экран не всегда хорошо, но скидывать их в лог хотелось бы. Ну и т.д.
PM MAIL WWW ICQ   Вверх
BlHol
Дата 8.8.2007, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 26.11.2005

Репутация: нет
Всего: нет



Извиняюсь, еще немножко помучаю?
1. Если в log, то err переопределять нужно. Так?
2. Если .out.println()  и .err.println()  выводят результат на консоль, то какая разница между ними в данном конкретном случае?

Заранее спасибо.
PM MAIL   Вверх
alex_smirnov
Дата 8.8.2007, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 22.6.2007
Где: Санкт-Петербург

Репутация: нет
Всего: 4



Не знаю как в Винде, но в Линухе разделение потоков, выдающихся на консоль будет выглядеть так:

java blablabla.class > x
стандартный поток вывода перенаправляется в файл;

java blablabla.class >& x
поток err перенаправляется в файл x;

и, если я не ошибаюсь:

(java blablabla.class > std) >& err
разделит два потока в два файла одновременно;

интересно, а как в Форточках разделять эти потоки?
PM GTalk Jabber   Вверх
AntonSaburov
Дата 8.8.2007, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Цитата(BlHol @  8.8.2007,  15:06 Найти цитируемый пост)
1. Если в log, то err переопределять нужно. Так?

Да
Цитата(BlHol @  8.8.2007,  15:06 Найти цитируемый пост)
2. Если .out.println()  и .err.println()  выводят результат на консоль, то какая разница между ними в данном конкретном случае?

Никакой.

Цитата(alex_smirnov @  8.8.2007,  15:23 Найти цитируемый пост)

интересно, а как в Форточках разделять эти потоки?

Так же практически

PM MAIL WWW ICQ   Вверх
anglerhood
Дата 8.8.2007, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 23.5.2007
Где: Спб

Репутация: 1
Всего: 3



из http://java.sun.com/javase/6/docs/api/ :
Цитата

Typically this stream corresponds to display output or another 
output destination specified by the host environment or user.
By convention, this output stream is used to display error messages or other information that should come to the immediate attention of a user even if the principal output stream, the value of the variable out, has been redirected to a file or other destination that is typically not continuously monitored.


А если по-русски, то в err отправляются сообщения, которые требую немедленного внимания юзера, даже если  стандартный out направлен в файл или в другое место, которое постоянно не отслеживается юзером.
PM MAIL ICQ   Вверх
COVD
Дата 8.8.2007, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Цитата

2. Если .out.println()  и .err.println()  выводят результат на консоль, то какая разница между ними в данном конкретном случае?


если программа отлаживается в IDE, то удобство в том, что разным цветом выводится - например, err - красным, а out - черным.
PM MAIL   Вверх
BlHol
Дата 8.8.2007, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 26.11.2005

Репутация: нет
Всего: нет



Спасибо за разъяснения!
PM MAIL   Вверх
Metal_Heart
Дата 8.8.2007, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а почему бы и нет?
**


Профиль
Группа: Участник
Сообщений: 728
Регистрация: 31.3.2005
Где: Москва

Репутация: 4
Всего: 12



anglerhood, почти сказал следующее:
поток ERR - не буфферизируется, потому данные на его выход поступают сразу же;
поток OUT - буфферизируется, потому данные на его выход могут поступать с задержкой;

грубый пример о буфферизации:
изучал JNI  под Линухом, тестовый пример предполагал о каждом действии выплевывать инфу на консоль. Так вот когда я впервые увидел свой лог в консоли я сначала был удивлен:
сначала вывелось всё, что java-приложение делало:
 - открыл файл;
 - запись данных в файл;
 - закрыл файл.

, затем вывелось всё, что драйвер делал, хотя они работали "бок-о-бок":
 - получен указатель на файл;
 - записывается такой-то блок данных в файл;
 - указатель освобожден.


--------------------
 не стыдно учиться, а стыдно не учиться 
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0510 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.