Объединение файлов

  • 10
  • Недоступна
Считать с консоли 2 имени файла. В начало первого файла записать содержимое второго файла так, чтобы получилось объединение файлов. Закрыть потоки.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (338)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
SRS4545
Уровень 29
Expert
1 июня, 01:31
Изгольнулся через временный файл прикола ради, но валидатор не принимает такое ресурсное решение, если что.
Paul
Уровень 32
18 апреля, 12:31
Получил из обоих файлов строки => записал их в файл в обратном порядке. Использовал класс PrintWriter и его метод append().
Murat
Уровень 30
15 апреля, 10:45
Решил с первого раза, но не заметил условие, что можно создать только один поток для записи в файл1. Посмотрел решение, увидел ByteArrayOutputStream, вспомнил о нём и появилось ощущение, что где-то на этом уровне нам о нём рассказывали. Не могу найти ту лекцию/статью. Подскажите пожалуйста, где раскрывалась эта тема? (Поиск по сайту не дал нужного результата)
Alexander Minaev
Уровень 26
7 апреля, 17:38
вспомните про byteArrayOutStream. Он облегчит все в 2 раза и не создавайте в try() поток записи со всеми потоками, а создавайте отдельно, когда надо будет именно записывать данные, после считывания файла(-ов). Я не особо понял, почему так он записывает как надо, а если прописать в самих скобках он не записывает обе строки. В правильных ответах вообще 2 try(), а почему так пояснений нет или я не заметил..
Виктор
Уровень 29
9 апреля, 19:44
Предполагаю что из-за того что потоки чтения открыты, поток записи не может записать в файл. А если поток записи открывать после того как закрыты чтения, то файл "свободен", и запись проходит. Но не уверен. Проверять лень.
very junior java developer www.codewars.com/r/TTH6EQ
23 марта, 15:14
Могут возникнуть сложности с валидатором. Вот пример 1 файл:
00000000000000000000
11111111111111111111
2й файл:
HelloWorld
вам может подуматься что в итоге в 1м файле должно быть так:
HelloWorld
00000000000000000000
11111111111111111111
Но важно понимать что во втором файле после HelloWorld байта перевода каретки не было, а следовательно валидатор ожидает:
HelloWorld00000000000000000000
11111111111111111111
Andrei Malahovski
Уровень 30
23 апреля, 16:58
Не вводите заблуждение! Валидатор принимает именно с учетом перехода каретки.
very junior java developer www.codewars.com/r/TTH6EQ
24 апреля, 11:57
Если бы в первом файле было так:
00000000000000000000
11111111111111111111
а во втором вот так:
HelloWorld
                                                                                                                                                                                                                                                 //это я поставил что бы показать что вторая строка есть но она пустая
тогда итоговый файл должен был бы выглядеть вот так:
HelloWorld
00000000000000000000
11111111111111111111
я имел и имею ввиду что все байты из обоих файлов переносятся как есть, и если символа \n или \r не было в исходном файле его не должен быть и в итоговом....
Sergey
Уровень 34
Expert
19 марта, 08:01
1-й файл в 1-й ArrayList<String>, 2-й файл во 2-й ArrayList<String>. Потом с помощью Collections добавляем 1й список в конец 2го списка и одним потоком записываем полученный список в первый файл
Антон
Уровень 35
31 марта, 12:46
Я скопировал первый файл в байтовый буфер в виде массива, размером input.available(), закрыл поток чтения и открыл поток записи, куда и слил второй файл + буфер сразу одним куском. Экономия памяти ровно в размер второго файла :)
Виктор
Уровень 29
9 апреля, 19:41
зачем создавать два списка и затем объединять? Просто в один список запихнуть содержимое файлов, только сначала 2й, потом 1й.
15 марта, 18:17
Валидатору не нравится readAllBytes() а с ним так легко и просто.
YuriSt
Уровень 26
7 марта, 15:13
- Считал первый файл в ArrayList<String>, - Записал все строки второго в первый файл, - Дописал ArrayList<String> в первый файл Всё отлично работает! ... но валидатор ругался По совету "Pavel V." убрал перевод строк "\n" и валидатор согласился, но в файле всё в одну строку!?
Антон
Уровень 35
31 марта, 12:50
Вместо ArrayList можно было бы использовать byte[availavle]. Методы потоков принимают такой тип напрямую. Удобно)
Лебовски
Уровень 42
20 февраля, 15:07
Оу круто, то что мы делаем уже похоже на "программы" которые могут что то самостоятельно делать))) Мне НРАИЦА)
Кирилл
Уровень 31
19 февраля, 12:59
Блин, да что за жесть то!!! С 17 раза. Уже которую задачу подряд. Станет когда-то полегче?))))
LukasKeyn
Уровень 37
30 марта, 11:38
да после CRUD - это легкие задачи. Особенно, если решаешь все подряд.В предыдущей задаче было решение этой фактически - научили команде output.write(input.read()) и дали понимание, как работает OutputStream( я просто посимвольно считывал до того, как в правильном решении увидел такую команду) Пока он не закрыт в него все пишется, не удаляя предыдущее. Здесь единственная сложность была в том, что OutputStream нужно создавать после операций с 1 файлом( Я все в лист добавил). Потом поработал со вторым файлом. А потом из листа добавил данные в OutputStream.