Не понял почему так - в задании сказано что текст должен быть дописан в файл. У всех в решениях конструктор пересоздает файл, и у меня тоже не получилось сделать чтоб он дописывал - где ошибка? По моей логике - вот тут я вызываю конструктор с ключом append. но тесты в Идеа показывают что файл все равно персоздается.
public AmigoOutputStream(FileOutputStream component) throws FileNotFoundException {
super(fileName,true);
this.component=component;
}
Dmytro
26 уровень
Задачу решил, но.
Решен
Комментарии (7)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Justinian Judge в Mega City One Master
11 мая 2020, 11:50
Мы открываем файл. Идет запись в файл. А ПОТОМ в этот файл должна пойти дозапись.
Поэтому никаких аппендов в этом задании не нужно, насколько я помню.
А конструктор пересоздает, поскольку у тебя будет дважды отрабатывать конструктор, а true у тебя наверное в одном месте только стоит.
В любом случае, здесь аппенд не нужен по условиям.
0
Dmytro
11 мая 2020, 13:24
Почему не нужен? В пункте 2.2 сказано "дописать в файл". а почему конструктор дважды отрабатывать будет?
0
Justinian Judge в Mega City One Master
11 мая 2020, 19:26
В условии указано дописать в текущий открытый файл, а не предыдущий.
+1
Ksenia Volkova Java Developer в DXC Master
11 мая 2020, 11:35
Без остального кода не очень понятно - но как между собой связаны поток, который ты создаешь через super и component, в который, как я понимаю, идет запись?
0
Dmytro
11 мая 2020, 13:28
Вот код. у меня вполне типичное решение получилось - как у всех.
import java.io.*;
/*
AmigoOutputStream
*/
public class AmigoOutputStream extends FileOutputStream{
public static String fileName = "C:/tmp/result.txt";
FileOutputStream component;
public AmigoOutputStream(FileOutputStream component) throws FileNotFoundException {
super(fileName,true);
this.component=component;
}
@Override
public void close() throws IOException {
flush();
String s = "JavaRush";
write(s.getBytes());
component.close();
}
@Override
public void write(int b) throws IOException {
component.write(b);
}
@Override
public void write(byte[] b) throws IOException {
component.write(b);
}
@Override
public void write(byte[] b, int off, int len) throws IOException {
component.write(b, off, len);
}
@Override
public void flush() throws IOException {
component.flush();
}
public static void main(String[] args) throws IOException {
FileOutputStream file = new AmigoOutputStream(new FileOutputStream(fileName));
}
}
0
Ksenia Volkova Java Developer в DXC Master
11 мая 2020, 14:49решение
Ну так твой AmigoOutputStream работает с FileOutputStream component. И этот FileOutputStream он получает при создании, в конструкторе. Он на него уже никак повлиять не может - если этот полученный им FileOutputStream был без append true, он и останется без него (и наоборот).
super(fileName,true); никак на этот поток не влияет.
+2
Dmytro
11 мая 2020, 14:53
Спасибо. понял.
0