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

  • 10
  • Недоступна
Собираем файл из кусочков. Считывать с консоли имена файлов. Каждый файл имеет имя: [someName].partN. Например, Lion.avi.part1, Lion.avi.part2, ..., Lion.avi.part37. Имена файлов подаются в произвольном порядке. Ввод заканчивается словом "end". В папке, где находятся все прочтенные файлы, создать фа
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (248)
  • популярные
  • новые
  • старые
Для того, что бы оставить комментарий вы должны авторизоваться
Даниил18 уровень
5 часов назад
Капец, такой огромный говнокодище (как для такой задачи) наваял, а оказывается что валидатору нужно не правильная сортировка, то есть: Lion.avi.part1, Lion.avi.part2, ... Lion.avi.part12, Lion.avi.part13, ... Lion.avi.part21 .... Lion.avi.part35 а такая которая по умолчанию во всех классах Tree (TreeSet, TreeMap) или методе Collections.sort(): Lion.avi.part1, Lion.avi.part12, Lion.avi.part13, Lion.avi.part2, ... Lion.avi.part21, Lion.avi.part22 .... Lion.avi.part3, ... Lion.avi.part35
Антон20 уровень, Нижний Новгород
15 января, 09:23
Опять некорректное задание. Сказано, что нужно вводить имя файла. Если сохранять отдельно путь к папке с файлами и применять String.concat(String), то валидатор не принимает. Будьте внимательный. Указывать нужно полный путь к файлу.
gtfo23 уровень, Санкт-Петербург
22 декабря 2018, 14:12
Количество комментариев под этой задачей, очень хорошо ее характеризует. Увидев в импорте TreeSet стал решать через него. Все стандартно. Потоки открывал через try-with-resources. Но для меня оказалось не очевидным из условия, что название файла, в который все будет записываться, надо вычислить на основе ранее полученных. Я просто написал путь к файлу. Согласен, возможно, это особенности моего восприятия и я сам дурак. Но вот как реагирует валидатор на эту ошибку: Я несколько раз все переписывал, тестил, все работало. Я по-новой перечитал, как пользоваться буфером, как пользоваться трай вис ресурс. Я не понимал, как и где я мог так по-идиотки ошибаться. Зашел в комменты, и из нескольких первых комментариев понял, что имя файла нужно вычленять из введенных ранее. Весь код прежний, указал распарсенный путь. И все. Прошло. Времени убито море из-за совершенно некорректных "рекомендаций ментора" и из-за нечеткого условия (хотя тут спорный момент, много людей справилось). Задача то не сложная.
19 декабря 2018, 10:21
Потерял кучу попыток из-за этой строки "Например, Lion.avi." Будьте внимательны нам необходим "Lion.avi", без точки.
Alexey Polyakov20 уровень
22 декабря 2018, 20:29
Так открой любую папку у себя в компе. Там тоже без точек. А та точка, так она предложение заканчивает. Так в русском языке делают, ага.. Пунктуация, беспощадная же стерва, да?
23 декабря 2018, 09:44
Алексей когда начнешь заниматься шифрование данных пользователей, тогда заметишь как важны точки в названиях кодированных файлов.
Дмитрий19 уровень
16 января, 11:50
Все верно, но точка там выделена жирным, что естественно приводит к мысли, что она принадлежит надписи "Lion.avi"
RuslanN27 уровень, Нижний Новгород
8 декабря 2018, 19:21
15 попыток... жесть. сначала сортировку не принимал, потом вдруг принял и начал ругаться что не записываются файлы, потом что потоки не закрыты.
Vitaly Khan35 уровень
8 декабря 2018, 13:08
если не делать никаких проверок на корректность введенных имен, то на основе TreeMap программа получается довольно компактной. вот мой вариант. p.s. сам не одобряю выкладывания готовых решений для копипастинга (поэтому прилагаю картинку), но иногда ведь бывает очень полезно и любопытно посмотреть другие подходы к решению ПОСЛЕ того, как решил сам.
Khabibullaev20 уровень
9 декабря 2018, 10:53
Да, решение короткое. Сам сделал чуть длиннее, но тоже похоже.
10 декабря 2018, 11:42
если есть 10 файлов то .part10 идет ранше .part2
Vitaly Khan35 уровень
11 декабря 2018, 00:05
спасибо за полезный коммент! думаю, многие могли это не учесть (даже валидатор!)... коварная ошибка...
Pavlic Morozov (pashok09i)20 уровень, Екатеринбург
12 января, 12:43
для этого нужно сортировать через компаратор? который также указан в импортах?
Pavlic Morozov (pashok09i)20 уровень, Екатеринбург
12 января, 12:45
да уж, а валидатор действительно это не учел
Anonymous #37410529 уровень, Амстердам
26 ноября 2018, 23:27
Если кому-то интересно, то от расширения в имени файла файла (в т.ч. и от .part#) можно избавиться с помощью следующего regular expression:
String fileNameWithoutExtension = fileName.replaceFirst("[.][^.]+$", "");
Здесь программа ищет все НЕ-точки + символ конца строки, которые следуют сразу же за символом точки. Найденный фрагмент строки заменяется на "".
Дмитрий26 уровень
19 ноября 2018, 17:22
Интересная задача. Решал долго.
split(".")
так делать нельзя
Vitaly Khan35 уровень
8 декабря 2018, 13:20
нельзя, т.к. после split указывается регулярное выражение. а точка в регулярках имеет особое значение. по идее должно работать, если ее экранировать:
split("\\.")
Constantine20 уровень
6 часов назад
Круто! Спасибо!
split("\\.")
Про экранировку не подумал. Но разве точка должна экранироваться??? И еще один вопрос. Из соображений на всякий случай. Я правильно понимаю, что можно экранировать любой символ???
Игорь23 уровень
19 ноября 2018, 16:09
задача огонь ))) из костылей использовал супер условие)))
if (list.get(0).toCharArray()[i] == '.' && list.get(0).toCharArray()[i+1] == 'p'&&list.get(0).toCharArray()[i + 2] == 'a'
                   && list.get(0).toCharArray()[i + 3] == 'r'&&list.get(0).toCharArray()[i + 4] == 't')
а еще написал свой компаратор)))
Василий23 уровень, Киев
13 ноября 2018, 19:48
2 попытки, 23 строчки кода в main и пару часов изучения regex и отсортированных словарей