undefined

Задачи | 1 уровень | 6 лекция

Java Collections
1 уровень , 6 лекция
Открыта

— Привет, Амиго! Я придумал тебе пару интересных задач.

Решать их можно только в Intellij IDEA. Вот, смотри, какие интересные условия…

undefined
7
Задача
Java Collections,  1 уровень,  6 лекция
Недоступна
Разархивируем файл
В метод main приходит список аргументов. Первый аргумент - имя результирующего файла resultFileName, остальные аргументы - имена файлов fileNamePart. Каждый файл (fileNamePart) - это кусочек zip архива. Нужно разархивировать целый файл, собрав его из кусочков. Записать разархивированный файл в resul
undefined
28
Задача
Java Collections,  1 уровень,  6 лекция
Недоступна
Добавление файла в архив
В метод main приходит список аргументов. Первый аргумент - полный путь к файлу fileName. Второй аргумент - путь к zip-архиву. Добавить файл (fileName) внутрь архива в директорию 'new'. Если в архиве есть файл с таким именем, то заменить его. Пример входных данных: C:/result.mp3 C:/pathToTest/test.z
Комментарии (103)
Чтобы просмотреть все комментарии или оставить свой,
перейдите в полную версию
Владимир Лукашов 23 уровень, Томск
23 февраля 2021
Может кому будет полезно Работа с ZIP-архивами. Запись и чтение здесь примеры работы с одним потоком
Anonymous #2489173 23 уровень
21 февраля 2021
Где-то раньше была задача на совмещение нескольких частей файла в один файл То есть вместо той задачи можно было просто написать что-то типа ZipInputStream is = new ZipInputStream(new SequenceInputStream(Collections.enumeration(fileInputStreams))) и не мучиться???
Артур Харатян 41 уровень, Санкт-Петербург
29 декабря 2020
CopyPast, едем дальше
wan-derer.ru 40 уровень, Москва
8 декабря 2020
По задаче "Добавление файла в архив". Мы сохраняем имеющиеся файлы архива "куда-нить в память". Для этого используем ZipInputStream.read(byte[]) Есть странная особенность этого метода. Дока: "Reads up to byte.length bytes of data from this input stream into an array of bytes" Я-то думал что кол-во считанных байт может оказаться меньше размера буфера только если в потоке их больше нет, ОДНАКО (!!!) это "ап ту" надо читать буквально! Если вы попросили буфер в 1024 байта, фиг вы получите 1024 байта! Обычно получается меньше даже если в потоке ещё много данных! Поэтому не получится как я пытался взять буфер размером с энтри и сразу его заполнить! Надо читать в цикле до тех пор пока read не выдаст размер -1. Надо использовать промежуточный буфер и заполнять ваш буфер тем кол-вом байт, которое получается на каждой итерации. У меня не получилось уловить закономерность в том сколько за раз отдаёт ZipInputStream, но для одного архива эти числа всё время одинаковые. Может там фрагментация какая-никакая, я ХЗ :) ЗЫ: в качестве буфера удобно использовать ByteArrayOutputStream
Антон 33 уровень, Новосибирск
25 ноября 2020
Валидатор изрядно потрепал мозг с этими задачами
Andrei 36 уровень, Санкт-Петербург
17 ноября 2020
Это первый блок лекций и задач, где я запутался абсолютно и даже стало казаться, что и пройденное по потокам забыл напрочь Если что, по этой ссылке есть часть инфы, которая может помочь разобраться https://www.baeldung.com/java-compress-and-uncompress
Sasha Motorin 28 уровень, Кострома
23 октября 2020
уж больно хочется на эту Eazy задачу положить болт
Кунг-Фу-Панда 36 уровень, Кунг-Фу-Сити
21 сентября 2020
Вторая задача проще чем кажется конечно! Весь цикл в: 1.Копируем всё в мапу. 2. Удаляем файл архива. 3. Копируем из мапы в новый зипаутпутстрим с указание файла архива 4. добавляем файл в новый архив с помощью Files.copy(Path, аутстрим) - это 1 строка З.Ы. try с ресурсами для стримов, меньше кода для глаз и из старых задач скопируйте метод копирования данных из стрима в стрим чтоб не ломать голову с перезаписью архива в мапу
MezoneOrange 37 уровень, Екатеринбург
11 сентября 2020
мда, как-то тяжко.
Николай 33 уровень, Ростов-на-Дону
17 августа 2020
Во второй задаче новый файл добавлять с помощью Files.copy иначе валик бесится.