Назрел вопрос - зачем нужно наследовать от 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." Я так понимаю ему не нравится то что я вызываю свои методы, а они уже дергают методы у обернутого объекта?