Назрел вопрос - зачем нужно наследовать от FileOutputStream?
Не было бы лучше унаследовать от OutputStream в результате чего не нужно было бо городить нечто подобное в конструктор
public AmigoOutputStream(FileOutputStream wrapee) throws FileNotFoundException,IOException {
super(String.valueOf(wrapee));
this.wrapee = wrapee;
}
и иметь лишние унаследованные поля в AmigoOutputStream?
Что типа такого
public class AmigoOutputStream extends OutputStream
private OutputStream wrapee;
Тогда конструктор был бы такой
public AmigoOutputStream(FileOutputStream wrapee) {
this.wrapee = wrapee;
}
И все бы работало
Ну и да, валидатор говорит что
"Метод flush() не делегирует свое выполнение классу FileOutputStream."
"Метод close() не вызывает flush() у объекта FileOutputStream."
Я так понимаю ему не нравится то что я вызываю свои методы, а они уже дергают методы у обернутого объекта?package com.javarush.task.task18.task1813;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/*
AmigoOutputStream
*/
public class AmigoOutputStream extends FileOutputStream {
public static String fileName = "C:/tmp/result.txt";
private OutputStream wrapee;
public AmigoOutputStream(FileOutputStream wrapee) throws FileNotFoundException,IOException {
super(String.valueOf(wrapee));
this.wrapee = wrapee;
}
@Override
public void write(byte[] b) throws IOException {
wrapee.write(b);
}
@Override
public void write(byte[] b, int off, int len) throws IOException {
wrapee.write(b, off, len);
}
@Override
public void flush() throws IOException {
wrapee.flush();
}
@Override
public void close() throws IOException {
flush();
byte[] javaRushStringByBytes = "JavaRush © All rights reserved.".getBytes();
write(javaRushStringByBytes);
wrapee.close();
}
@Override
public void write(int b) throws IOException {
wrapee.write(b);
}
public static void main(String[] args) throws FileNotFoundException,IOException {
new AmigoOutputStream(new FileOutputStream(fileName));
}
}