Учитель diego

AmigoOutputStream

  • 10
  • Недоступна
1 Измени класс AmigoOutputStream так, чтобы он стал Wrapper-ом для класса FileOutputStream. Используй наследование. 2 При вызове метода close() должны выполняться следующая последовательность действий: 2.1 Вызвать метод flush(). 2.2 Дописать следующий текст "JavaRush © All rights reserved.", использ
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (114)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Виталий Вакуленко20 уровень, Киев
10 сентября, 11:51
Н-да, IDEA повставляла во все переопределения вызовы super.write(byte[]) и это стало проблемкой... оказалось нужно просто обращаться к объекту потока вывода без всяких суперов. Ну и момент с конструктором тоже не алё )).
Павел Минеев31 уровень, Челябинск
27 августа, 08:20
Валидатор долго докапывался до пункта :"3. Класс AmigoOutputStream должен принимать в конструкторе объект типа FileOutputStream.". Оказалось, что этот конструктор должен быть ЕДИНСТВЕННЫМ конструктором класса-обертки. Наиужаснейшая задача, учит только плохому.
Anatolf20 уровень, Санкт-Петербург
19 августа, 16:44
для тех кто тупил как я по поводу пункта 2.2 String Str = new String("JavaRush © All rights reserved."); byte[] b = Str.getBytes(); original.write(b); ..ну и закрыть после поток, как требуется. Как я понимаю, после flush() можно ещё дописать в файл информацию, а после close() уже нельзя.
Vladimir Nasarov19 уровень, Самара
9 сентября, 08:51
можно без лишней переменной:
fileOutputStream.write("JavaRush © All rights reserved.".getBytes());
Wladyslaw22 уровень, Warsaw
4 августа, 10:39
Не пойму зачем наследовать от FileOutputStream, если можно унаследовать от OutputStream. В первом случае пришлось тулить такую чушь в конструктор
public AmigoOutputStream(FileOutputStream wrapee) throws FileNotFoundException {
    super("null");
    this.wrapee = wrapee;
}
потому как у FileOutputStream нет конструктора без параметров. По сути - у объекта нашего типа будет унаследованное поле с файлнеймом - "нулл". Зачем оно нужно? А оно и не нужно ибо все равно все поведение делегируем объекту, который был принят в конструкторе.
Nail27 уровень, Кельн
30 июля, 11:57
у меня одного в файл на диске не пишется надпись "JavaRush © All rights reserved."? Хотя валик все принял.
Арзамас23 уровень, Самара
7 августа, 18:33
так метод close() же не вызывается в main(), потому и не пишет
Nail27 уровень, Кельн
8 августа, 10:05
спасибо, учту!
Василий23 уровень, Санкт-Петербург
19 июля, 21:19
super("/dev/null") конечно пригодилось, но это же некрасиво, зачем такому учить?
Павел27 уровень, Минск
6 июля, 18:21
Да, задачки совсем непростые, может кому-то пригодится из лекции(делал перечитывая по 5 раз пока не дошло): Если мы хотим «обернуть» вызовы методов какого-то объекта своим кодом, то нам нужно: 1) Создать свой класс-обертку и унаследоваться от того же класса/интерфейса что и оборачиваемый объект. 2) Передать оборачиваемый объект в конструктор нашего класса. 3) Переопределить все методы в нашем новом классе, и вызвать в них методы оборачиваемого объекта. 4) Внести свои изменения «по вкусу»: менять результаты вызовов, параметры или делать что-то еще. В примере ниже мы перехватываем вызов метода getName у объекта cat и немного меняем его результат.
Константин22 уровень, Москва
25 июня, 15:00
И всё же если дописать в файл, то
public static void main(String[] args) throws FileNotFoundException, IOException {
     new AmigoOutputStream(new FileOutputStream(fileName, true));
 }
Строка будет добавляться в конец файла, а не затирать его собой. Но для валидатора прокатывает затереть файл и написать строку. Тем более, что main изменять нельзя. Другим способом (без main) в конструкторе как-то где-то вклинить true, чтобы строка добавлялась в конец файла не получилось.
Тимур20 уровень, Красноярск
9 июня, 08:08
во я залип... уже думал никогда не сделаю ))) жесткая задачка
Nordis25 уровень, Санкт-Петербург
14 июля, 10:05
Вы такие забавные , выкладываетете по 5 попыток. И говорите что вы залипли. У меня порой по 15 -20 попыток уходит. Начинаеться игра , угадай что хочет Валик. Но именно на эту задачу ушло 4 попытки.
Roman Komarov19 уровень, Минск
6 июня, 20:02
Аффтерры жгуд... пояснение к 2.2 Дописать следующий текст "JavaRush © All rights reserved.", используй метод getBytes(). это означает, что нужно дописать этот текст в поток, в виде байт-последовательности, и потом закрвть поток.
Nordis25 уровень, Санкт-Петербург
14 июля, 10:22
Твой коммент , мне помог решить задачу. Я думаю.. что же хочет он что бы я дописал. И совсем забыл про этот пункт. Спасибо тебе.