AmigoOutputStream

  • 10
  • Недоступна
1 Измени класс AmigoOutputStream так, чтобы он стал Wrapper-ом для класса FileOutputStream. Используй наследование. 2 При вызове метода close() должны выполняться следующая последовательность действий: 2.1 Вызвать метод flush(). 2.2 Дописать следующий текст "JavaRush © All rights reserved.", использ
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (269)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Валерий Усков
19 уровень, Санкт-Петербург
13 мая, 20:43
Опять столкнулся с тем, что валидатор не принимал решение. Перепроверил все что можно, вроде Ок. опять запускают валидатора, а он снова посылает меня учить мат.часть. И так 10 попыток. Психую, лезу в Правильное решение создателей, сверяю со своим кодом, сходство 100%. Ок, думаю. Копирую Правильное решение создателей и даю скушать его валидатору и, шок))), валидатор посылает учится дальше))))). Сослался на глюк, перезагружаю страницу браузера, ставлю проверку и снова валидатору что то не нравится. Жму обнулить решение и вставляю свое решение, которое на 100% совпадает с правильным, проверяю и наконец-то решение принято. Итог, 17 не верных решений!!! Второй раз сталкиваюсь с такой проблемой, создатели проверьте, пожалуйста. Не приятная такая ситуация. P.S. не заладилось у меня как то с плагином для ИДЕА, поэтому курс полностью в браузере, а решаю в ИДЕА. Мне так удобнее))
Alexandr Vlasov
19 уровень, Москва
20 апреля, 13:24
Вот такой вопрос: скопировал из условие требуемую фразу, проверил вывод в файл и увидел что дописывает: JavaRush В© All rights reserved. разбил на три строчки и собаку черед 64 байт вставлял. Валидатор ругался на чем свет стоит, но толком не объяснял. Оставил как есть с выводом B и всё ОК
Маргарита
22 уровень, Москва
12 апреля, 11:05
может, кто-нибудь сможет объяснить. в конструкторе AmigoOutputStream мы обязаны вызвать конструктор класса-родителя, по понятным причинам, поэтому в коде появляется это:
public AmigoOutputStream(FileOutputStream fileOutputStream) throws FileNotFoundException {
        super(fileName);
        this.original = fileOutputStream;
    }
Конструктор, по идее, создает экземпляр класса. Получается ли, что этот конструктор сперва создает экземпляр родительского класса с параметром fileName, а потом создает экземпляр дочернего класса, но не на основе созданного родительского, а на основе того, который принимает на вход. что тогда происходит с тем экземпляром, который в super()?
Flexo Bending Unit #3370318
1 мая, 07:25
Конструктор создаёт только один объект, тот, у которого он вызывается) дальше идёт инициализация объекта путём инициализации полей, вызовов методов и чего угодно ещё, чем мы вольны снабдить наш конструктор. У нас создаётся всего один объект, который является экземпляром одновременно двух классов - наследника и базового; конструктор базового позволяет проинициализировать созданный объект с той же логикой, как это обычно происходит у базового класса. Например, строка fileName передаётся во внутреннее поле базового класса path (это два конструктора базового класса FileOutputStream, первый обращается ко второму, не пугайтесь):
private final String path;
public FileOutputStream(String name) throws FileNotFoundException {
    this(name != null ? new File(name) : null, false);
}
public FileOutputStream(File file, boolean append) throws FileNotFoundException {
    ...
    String name = file != null ? file.getPath() : null;
    ...
        this.path = name;
    ...
}
правда, внутреннее поле path в нашем объекте недоступно, потому что в базовом оно приватное, а в наследнике попросту не объявлено, и вся эта логика может уже и не работать. итак, конкретно в нашем примере - происходит создание объекта, инициализация по логике базового класса, и инициализация уже своей внутренней переменной, которой нет в базовом классе. всё. но вообще-то да, с обёрткой немного путаешься, потому что создаётся два очень похожих объекта, один из них - это AmigoStream, а второй - это тот, что записан в его внутреннее поле типа FileOutputStream.
Igor
27 уровень, Минск
7 апреля, 13:27
Обратите внимание на пункт задания:
4. Все методы write(), flush(), close() в классе AmigoOutputStream должны делегировать свое выполнение объекту FileOutputStream.
Там реально нужны ВСЕ эти методы. Все != 3 метода.
Максим "Evengarr" Меднов
18 уровень, Москва
26 марта, 18:07
не нужно создовать все конструкторы которые создаются в классе родителе, а только тот что указан в задании, в противном случае валидатор не пропустит 3 пункт
Тимур
22 уровень, Москва
8 марта, 11:46
Валя меня затереризировала пунктом "Метод main нельзя изменять" Ничего не менял в нем я, но Валя была недовольна. Просто перенес метод Main вверх класса и Валя успокоилась. Сегодня 8 марта - ей можно себя так вести)))) КСТАТИ С 8 МАРТА ПРЕКРАСНЫЕ ПРОГРАММИСТОЧКИ)
3 марта, 09:40
Интересно, а что если нужно добавить, данные в начало или середину файла? Есть ли способ это сделать, без предварительного копирования всего содержимого файла в буфер?
3 марта, 09:35
В условии сказано "Дописать следующий текст "JavaRush © All rights reserved."", а что бы именно дописывать текст, а не переписывать каждый раз файл, нужно и в конструкторе класса AmigoOutputStream передать вторым параметром true
super(fileName,true);
и так же в методе мэйн передать true вторым параметром при создании объекта FileOutputStream
new AmigoOutputStream(new FileOutputStream(fileName,true)).close();
иначе все данные в файле будут затираться новыми.
Anonymous #2297535
22 уровень, Северодвинск
1 марта, 15:14
А зачем использовать getBytes() для вывода сообщения? Нужно вывести его через стандартный ввод используя ByteArrayInputStrem чтоли? И что вообще в этом доме происходит? А?
VasliyD
22 уровень, Москва
2 марта, 17:59
Для вывода используется метод write потока FileOutputStream, он не может съесть String, только массив байтов, поэтому строку надо сначала в него переделать, чтобы он проглотил. Я так думаю )
Даниил Александрович
31 уровень, Тамбов
5 февраля, 14:40
очередная странная задача.