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

  • 10
  • Недоступна
Собираем файл из кусочков. Считывать с консоли имена файлов. Каждый файл имеет имя: [someName].partN. Например, Lion.avi.part1, Lion.avi.part2, ..., Lion.avi.part37. Имена файлов подаются в произвольном порядке. Ввод заканчивается словом "end". В папке, где находятся все прочтенные файлы, создать фа
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (279)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Владлен19 уровень, Санкт-Петербург
среда, 11:18
А кто знает, что с ИДЕЕЙ? После обновления пропали кнопки для плагина...
Владлен19 уровень, Санкт-Петербург
среда, 10:45
Может кому поможет: создавать файл методом createNewFile() не надо, валидатор не знает, что это такое(и уж тем более не смейте определять полный путь к файлу перед этим=))))). Просто колдуете со считанным именем с помощью сабстринга или сплита и для полученного имени открываете поток для записи(я так понял, что файл в этом случае создаётся автоматически, где положено...если нет - поправьте меня). И следите за тем, где закрываете потоки на чтение.
Maksym19 уровень, Днепр
12 апреля, 13:14
Валидатор убил.Проблема была в том что откусить .part надо было явно.А обвинял во всех смертных.... 10 попыток и 3 часа ((( P.S finalFile = s.split(".part")[0]; только после того как решил понял смысл этой записи Это элемент массива для меня это пока плохо читаемый код, но за такие выверты я и люблю программирование,это как поэзия
Павел23 уровень, Санкт-Петербург
29 марта, 14:43
по сути никакие коллекции использовать вообще не надо. Все, что нужно это получить полный путь к файлам:
String finalFile = null;

String s = bufferedReader.readLine();;
            finalFile = s.split(".part")[0];
И с каждой итерацией ввода названия очередной части, просто увеличиваем счетчик на 1;
while (!(s = bufferedReader.readLine()).equals("end")){
                countOfFiles++;
            }
Ну потом начинаем их открывать следующих образом по очереди:
for (int i = 0; i < countOfFiles; i++) {
                FileInputStream fileReader = new FileInputStream(finalFile + ".part" + (i + 1));
Ну и записываем в буфер каждый файл, а потом добавляем по кускам в новый.
Albert25 уровень
14 марта, 05:31
Сортировка коллекции отлично работает с полным именем файла) мне хватило List для хранения имен файлов и String для хранения исходного имени файла( Правда с помощью массива String[] сперва отделил .part через split, чтоб первую часть записать как имя файла)
Albert25 уровень
14 марта, 05:08
крутая задача)) на ее основе разобрал видео по 500 мб, а потом собрал и запустилось как положено))) просто шикарные ощущения))
Александр20 уровень, Казань
13 марта, 11:22
Имя файла храню в переменной Индексы в Tree. Проверил на файле 1Гиг - затратилось секунд 30. Мое решение.
Сергей27 уровень, Москва
14 марта, 13:24
а твое решение валидатор принял? можешь моё посмотреть, не понимаю почему его не принимает https://javarush.ru/help/17748
Александр20 уровень, Казань
14 марта, 18:53
Принял вроде ) Гляну.
Николай22 уровень
27 февраля, 10:49
Если кому то надо будет разделить строку по точке - ее нужно экранировать вот таким образом:
split("\\.")
Oleksandr Myrko20 уровень, Львов
7 марта, 13:14
Краще split(".part")
Николай22 уровень
7 марта, 15:47
что не отменяет требования экранировать точку, т.к. это регулярное выражение и точка имеет другое значение
Aleksei Dobrovolskii23 уровень
25 февраля, 09:02
Очень интересно. Моё не оптимальное, но 100% работоспособное решение валидатор не принял, но за то кривое решение, которое с любыми бинарниками не работает - принял как родное. %) Проверял на файле, разбитом архиватором на части.
Shamil20 уровень
21 февраля, 16:39
Думал, что Валя не пропустит через BufferedWriter (ну что бы читать построчно, в тз указанно байты) попробовал на свой страх и риск (только не знал чем рисковал)) ну все равно приятно когда с первого раза, мотивирует, а так же это педагогический подход который способствует поднятию средней оценки учащихся, я не против как некоторые, когда учащиеся делятся своей оценкой) ну короче пропустило через BufferedWriter код максимум 20 строк