Два в одном

  • 10
  • Недоступна
Считать с консоли 3 имени файла. Записать в первый файл содержимого второго файла, а потом дописать в первый файл содержимое третьего файла. Закрыть потоки.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (156)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Anonymous #3036451
Уровень 27, Falls Church, United States
9 мая, 08:35
Чтение и запись по одному символу, как в правильном решении, мягко говоря, не производительно. Используйте буфер:
char[] buffer = new char[1024];
Иван
Уровень 37, Russian Federation
8 марта, 19:33
Почему в правильном решении не закрыты потоки?
Евгений
Уровень 36, Москва
30 марта, 08:56
Закрыты
Anonymous #2656537
Уровень 34
23 июня, 14:02
try with resources
SoSed
Уровень 38, Киев, Ukraine
21 января, 09:31
На всякий случай, оставлю ещё и сдесь. О FileInputStream.readAllBytes() Валентин до сих пор ничего не знает))
Andrey Sanin
Уровень 28, Минск, Belarus
24 марта, 21:39
Да, решение с readAllBytes не принял...
Сергей Коваленко
Уровень 37, Краснодар
9 января, 19:31
все потоки можно закрывать одновременно, т.к. у них разные источники. try-with-resources годится. FileWriter затирает данные в файле при создании объекта потока, когда в конструкторе отсутствует параметр append, либо он задан явно false.
Вадим
Уровень 22, Россия
6 января, 08:19
Думал, что смысл задачи это писать в файл, в котором уже есть данные, дабы его не перезатереть. Поэтому, сделал запись файла, закрытие потока, потом запись с append = true, снова закрытие потока. Но оказалось, что нужно было просто записать результат двух файлов за один раз
milyasow
Уровень 30, Москва, Russian Federation
6 июня, 12:17
Та же петрушка. Зато запомним, что если поток не закрыт, в него можешь дописывать что хочешь.
БелК в труселях
Уровень 35, Покровск, Ukraine
5 декабря 2021, 16:15
Посмотрел и понял, что зря true ставил, а также буфер как массив , а также закрытия буфера и опять закрытия буфера.
Sergey Kornilov
Уровень 38, Petropavlovsk, Казахстан
13 ноября 2021, 10:22
Всего эту задачу решили 21449 учеников. FileWriter и FileReader в помощь.
BoKL
Уровень 32, Кременчук, Украина
20 октября 2021, 08:43
После решения задачи всегда смотрю правильное решение, а там почему-то не закрывается BufferedReader который используется для чтения с консоли имен файлов 🤷‍♂️
Владимир
Уровень 34, Россия
4 ноября 2021, 07:28
В условии не просили, вот и не закрывают :) Так-то лучше закрыть, конечно
Ulysse
Уровень 30
7 ноября 2021, 13:53
если не ошибаюсь, то потоки-обертки при закрытии закрывают и базовые потоки. в этом случае через try with resources закрываются FileOutputStream и FileInputStream, потому закрывается и BufferedReader
Владимир
Уровень 34, Россия
7 ноября 2021, 17:05
Про закрытие базовых потоков это верно подмечено, но я так понял имелась в виду именно эта часть кода:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String fileName1 = reader.readLine();
        String fileName2 = reader.readLine();
        String fileName3 = reader.readLine();
Здесь не наблюдаю закрытия того же потока System.in
Erik
Уровень 45, Уфа, Россия
21 сентября 2021, 02:17
Вовремя вспомнил про метод append. Он же ведет дозапись в текстовые потоки, включая и потоки файлов. И если надо, чтобы файл не перезаписывался при чтении в него другого файла, то можно использовать данный метод. И код короткий получается
Ulysse
Уровень 30
7 ноября 2021, 13:50
а можно еще использовать конструктор FileWriter, который для такого и создавался всего то и нужно, что дописать слово true, и не будет перезаписываться файл
FileWriter fileWriter = new FileWriter(fileName1, true)
Raviletti
Уровень 37, Винтерфелл, Вестерос
8 сентября 2021, 22:48
Присоединяюсь к сгоревшим: Сначала создал два потока на чтение и один на запись, и при их инициализации передал им путь к файлам. То-ли порядок открытия потоков играет роль, то-ли важно передать путь к файлам в виде отдельной строки, но в первой попытке валя не пропустил ни по одному пункту, хоть и все работало.