Собираем файл

  • 20
  • Недоступна
Собираем файл из кусочков. Считывать с консоли имена файлов. Каждый файл имеет имя: [someName].partN. Например, Lion.avi.part1, Lion.avi.part2, ..., Lion.avi.part37. Имена файлов подаются в произвольном порядке. Ввод заканчивается словом "end". В папке, где находятся все прочтенные файлы, создать фа
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (540)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
aleksdenni
Уровень 37, Полтава, Украина
28 августа, 12:14
Прикольная задачка , хоть и простая. С начала начал что-то как всегда мудрить, потом понял что перегибаю. Записал имена файлов в значения три мап , а ключами поставил отрезанные сплитом номера. Потом запустил поток на чтение и запись внутри фор ейча , в котором вытаскивал имена файлов для чтения. А имя файла для записи получил через субстринг(0, fileNamePart.lastIndexOf(".")) 😸
Александр
Уровень 30, Петрозаводск
27 августа, 07:29
Просто запомнил количество файлов введенных с консоли и собственно название исходного файла и в цикле создавать имя файла откуда читаем данные.
Максим Глотов
Уровень 35, Новосибирск
19 августа, 17:32
создал обычный ArrayList<Integer> для хранения НОМЕРОВ файлов - раз уж смогли разобрать имена частей, то и собрать их обратно легко!
Maxim Dimitrov
Уровень 35
9 августа, 08:02
У FileInputStream есть замечательный метод ReadAllBytes, но валидатор о нём не знает :( Приходится извращаться с циклами и буферами.
Руслан
Уровень 23, Стерлитамак, Россия
4 августа, 10:20
Думал, что этот суффикс ставится после названия файла, а он ставится в конце. то есть Например: G:\a.txt.part15 А я думал, что суффикс должен быть таким: //G:\a.part15.txt Из-за этого ошибки, пришлось с 4-й попытки сделать задачу.
Белич Максим Работает в BelEnergo ❤
19 июля, 12:13
500 комментариев, а делов на 15 минут) Имя файла узнавал так - просто из три сет брал элемент и делал его SPLIT.
String[] fileName = string.split(".part");
Элемент под номером 0 возвращаемого массива и будет именем файла. Буфер делал такой:
byte[] bytes = new byte[fis.available()];
fis.read(bytes);
fos.write(bytes);
Artem
Уровень 20, Санкт-Петербург
20 июля, 05:18
сплит через ".part" помог, спасибо пробовал через точку, получась какая-то шляпа
Белич Максим Работает в BelEnergo ❤
20 июля, 06:20
Потому что имя файла может быть Lion.avi.part2
Кристи
Уровень 23, Минск, Беларусь
19 июля, 11:21
Мне не понятен этот пункт: В папке, где находятся все прочтенные файлы, создать файл без суффикса [.partN]. как создать в нужной папке? Объясните кто понимает или бросьте ссылку где почитать, пжлста.
Кристи
Уровень 23, Минск, Беларусь
19 июля, 17:38
все, понятен. Название папки-это путь к файлу без последней части.
Vladimir
Уровень 39, Тольятти, Россия
18 июля, 16:45
Сделал запись через BufferedReader - BufferedWriter - валидатор принял на ура. Но вот по факту программа не рабочая.
Yarick8bit PPC & Web Analyst
16 июля, 17:41
Добавлял имена файлов в Трисэт. Чтобы взять имя для выходного файла: трисэт.фёрст().реплейсОлл(регулярное выражение, "")
Михаил
Уровень 19, Санкт-Петербург
7 июля, 14:33
Через цикл загнал все пути файлов в ArrayList. Ридер закрыл. Сделал отдельно метод для раздербанивания строки. Сначала прошелся split’ом по слэшам, потом по точкам. Получил в последней ячейке массива partN. Из этой строки выдрал substring’ом циферки и распарсил их в кота. Кота в том же цикле запихал в TreeMap ключом, а значением загнал полный путь. Вуаля! Ничего сортировать не надо. Затем стрингбилдером слепил полный путь к конечному файлу, используя уже имеющиеся данные от предыдущих поторошений. Сделал ссылку File, инициализировал ее nullom чтобы везде видна была. В методе создал объект Solution и, при помощи класса File сразу создал конечный пустой файл. Никаких static переменных. Затем в main прошелся по TreeMap и переписал все части в этот файл, используя FileOutputStream с параметром append, используя буфер. Все читульки-писульки обернул в try-with-resourses. Работает как часы, просто и без геморроев. Велимудр поставил зачот по первому и последнему пункту. По остальным вежливо послал меня на PathName. Читал трэд умных мыслей предыдущих победителей Вольдемара. Предположение, что File всему мешает, как и раньше – допустим файл уже есть, и его создавать не надо. Убираем поле File, вместо него ставим String. Пишем все файлы в буфер ByteArrayOutputStream. Затем из этого буфера как в задаче 1819 все вываливаем в уже существующий файл. Опять неудача, тестируем путь конечного файла – проклятье, там точку в конце прописал. Редактирую склеивание полного пути без точки – с 4й попытки Вольдемар одобрил. Вывод – надо убирать класс File, использовать ByteArrayOutputStream – именно его в условии и имеют ввиду. Раздербанивание пути далеко от идеала, зато наглядно. Прочитал эталон понял, что все это не имеет никакого значения, там все решено по другому. Все-таки заморочился с оценкой времени - мой код получился более быстродейственным аж на 1435 мс. Хоть какое-то утешение.