Результат то я получил, но валидатор ругается просто на все. Чето я под вечер уже ничего не соображаю. Оставлю тут, может кто что дельное подскажет.
file3
file2
Результирующий файл
Считать с консоли 3 имени файла.
Записать в первый файл содержимого второго файла, а потом дописать в первый файл содержимое третьего файла. Закрыть потоки.
Требования:
Программа должна три раза считать имена файлов с консоли.
Для первого файла создай поток для записи. Для двух других - потоки для чтения.
Содержимое второго файла нужно переписать в первый файл.
Содержимое третьего файла нужно дописать в первый файл (в который уже записан второй файл).
Созданные для файлов потоки должны быть закрыты.
abcdefhijklmnop
0
Комментарии (4)
популярные
новые
старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
это плохо.
Может быть допустимо в ряде ситуаций, но у тебя это система.
Оно вроде и логично, но у меня глаза разбегаются от этих методов , конструкторов и параметров и возникают в голове лишние вопросы.
А твой код должен давать ответы.
2. Джава доки пишутся через две звездочки, чтобы текст был зеленым.
/**
@params
inputFile - Path object of a "from" file
os - FileOutputStream with append = true flag of "to" file
*/
В данном случае у тебя по сути это комментарий. Абсолютно ненужный.
3. finally {
Уже 8 лет прошло с момента выхода седьмого jdk в котором добавили try with resources.
Блок файнелии у тебя это 10 неоправданных строк кода
4.
if/else/while/for мы пишем с фигурными скобками всегда. Разрешаются для if исключения но на более низкоуровневых алгоритмах. Не в этом случае так точно.
5.
System.err.println("No such file found.");
Если хочешь сделать как правильней, то правильней было бы бросание эксепшена либо (что лучше для валидтора) это просто печать стектрейса. Сауты это так, первый квест джава раша чтобы познакомить с исключениями.
В других местах же у тебя:
System.err.println("Input Stream close failed.");
e.printStackTrace();
или
System.err.println("Files copy failed.");
hrow new FileCopyFailedException("Files copy failed", e);
К чему дублирование сообщений саутом ?
А так в целом, очень даже хорошо. Еще бы валидировалось)
По самой задаче, пробуй сдать валидатору.
Написать хороший код у тебя получилось, мы ставим отметку, но этого мало.
Нужно стремиться к тому чтобы и код был хорош, и валидатор принимал, это вполне возможно. И это новый вызов для тебя.
Я бы в первую очередь поубирал бросание эксепшенов и сауты (последние не влияют на валидацию скорее всего, но они и так не нужны в программе, лишь замусоривают хороший код), а потом пытался бы разобраться исходя из сообщений валидатор.
Если все красное - такое впечатление что все валится с эксепшеном, импорта с 9+ ждк я у тебя не заметил, но валидатор обычно пишет о ошибках компиляции. Если повезет, убрав эксепшены запустится , если нет..придется либо искать дополнительные тест кейсы в секции Обсуждение и Вопросы, либо переписывать части программы.
Если интуиция тебя не приведет к решению
Добрался таки наконец-то до компа - в общем ему нужно было явное использование потоков, передача в конструктор объекта File тоже ему не нравилась и там еще по мелочам. Хотя там в статических методах Files тоже потоки под капотом - я смотрел
Принял такой вот ущербный код, хотя он даже не будет файл перезаписывать если его еще раз запустить, он в обеих случаях будет дописывать в конец файла.
Ну насчет потоков формально валидатор прав, используешь статические утильные методы, потоки создаются, но не тобой и не в скоупе твоей программы, ты нажимаешь волшебную кнопочку, где-то создается поток и твоей программе передается в виде готового объекта.
Поэтому в этой части обычный рабочий момент, сказали так, да ради бога.