— Привет, Амиго!

— Здравия желаю, Капитан Бобров!

— Готов к новой секретной миссии?

— Конечно готов, сэр!

— Тогда вот тебе файл с инструкциями. Сегодня мы будем разрабатывать новую версию искусственного интеллекта. Человечеству нужна наша помощь. Мы обязаны спасти людей от гибели.

— Но, сэр! Я не могу открыть файл. Нужен архиватор.

— Да? Кхм… Тогда спасение человечества переносится. Напишем сегодня собственный архиватор.

Большая задача: Пишем архиватор на Java - 1

— Товарищ Капитан, а как же люди?

— Ничего с ними не случится. Обратись за заданием к агенту Intellij IDEA, там получишь все инструкции.

— Разрешите приступить, сэр?

— Приступайте.

undefined
16
Задача
Java Multithreading, 7 уровень, 15 лекция
Недоступна
Archiver (1)
Давай напишем архиватор. Архиватор, как минимум, должен уметь архивировать и разархивировать файлы. Начнем с первого. Нам потребуется менеджер архива. Он будет совершать операции над файлом архива (файлом, который будет храниться на диске и иметь расширение zip). Класс, который будет этим заниматься
undefined
32
Задача
Java Multithreading, 7 уровень, 15 лекция
Недоступна
Archiver (2)
Сейчас мы напишем реализацию метода createZip(Path source), в котором мы будем архивировать файл, заданный переменной source. В Java есть специальный класс ZipOutputStream из пакета java.util.zip, который сжимает (архивирует) переданные в него данные. Чтобы несколько файлов, сжимаемые в один архив,
undefined
16
Задача
Java Multithreading, 7 уровень, 15 лекция
Недоступна
Archiver (3)
Как видишь, архивировать оказалось не так уж и сложно. Но наш архиватор получился каким-то уж слишком примитивным. Настоящий архиватор должен уметь гораздо больше: распаковку архива, добавление нового файла в существующий архив, удаление файла из архива, просмотр содержимого архива. Сейчас мы будем
undefined
16
Задача
Java Multithreading, 7 уровень, 15 лекция
Недоступна
Archiver (4)
Каждая команда подразумевает выполнение каких-то действий. Создадим интерфейс Command, с методом execute() (execute – «выполнить» по-английски). Для каждой команды мы создадим свой собственный класс. Все классы команд должны реализовывать (быть унаследованы) интерфейс Command. Так как команд будет м
undefined
8
Задача
Java Multithreading, 7 уровень, 15 лекция
Недоступна
Archiver (5)
Разделим команды на два типа: те, которые работают непосредственно с архивом и вспомогательные (например EXIT). Все команды первого типа, будут иметь общий функционал, его удобно вынести в какой- то их общий базовый класс. Назовем этот класс ZipCommand. Он, как и все классы команд, должен реализовыв
undefined
16
Задача
Java Multithreading, 7 уровень, 15 лекция
Недоступна
Archiver (6)
Представь, что пользователь сообщает нам с помощью переменной Operation operation, что он хочет сделать. Тогда мы должны проверить значение этой переменной, создать объект соответствующего класса команды и вызвать у него метод execute(). Чтобы не создавать объект класса нужной команды каждый раз, ег
undefined
8
Задача
Java Multithreading, 7 уровень, 15 лекция
Недоступна
Archiver (7)
Мы много всего сделали и можно немного передохнуть. Создадим, пакет exception и добавим в него два класса PathIsNotFoundException и WrongZipFileException. Исключение PathIsNotFoundException будем кидать, если не сможем найти путь, в который нужно распаковать архив, или путь к файлу, который хотим за
undefined
32
Задача
Java Multithreading, 7 уровень, 15 лекция
Недоступна
Archiver (8)
Чтобы узнать какую команду сейчас хочет выполнить пользователь, добавим метод Operation askOperation() в класс Archiver. Этот метод должен вывести в консоль список доступных команд и попросить выбрать одну из них. Для удобства будем просить ввести номер команды, где номер – это порядковый номер кома
undefined
32
Задача
Java Multithreading, 7 уровень, 15 лекция
Недоступна
Archiver (9)
Теперь займемся другой, не менее важной частью нашего архиватора. Очень часто пользователь хочет создать архив не из одного файла, а из целой папки. Тогда архивация сводится к поочередному добавлению элемента ZipEntry для каждого файла в архив. Нам нужно написать класс FileManager для получения спис
undefined
32
Задача
Java Multithreading, 7 уровень, 15 лекция
Недоступна
Archiver (10)
Пришло время отрефакторить класс ZipFileManager. В методе createZip есть код, который нам также понадобится в методах, которые будут добавлять или удалять файл в архив, распаковывать его и т.д. Эти методы мы будем реализовывать позже, но уже сейчас можем вынести общие части кода в отдельные методы.
undefined
32
Задача
Java Multithreading, 7 уровень, 15 лекция
Недоступна
Archiver (11)
Давай наконец попробуем нормально реализовать метод execute() класса ZipCreateCommand, который мы добавляли раньше. Для этого нужно: 1. В начале метода добавить вывод сообщения "Создание архива." Не забудь, что мы работаем с консолью через методы класса ConsoleHelper. 2. Создай новый объект класса Z
undefined
16
Задача
Java Multithreading, 7 уровень, 15 лекция
Недоступна
Archiver (12)
Сегодня мы подготовимся к реализации команды ZipContentCommand. Она будет заниматься получением содержимого архива. Содержимое архива – это упакованные файлы и папки, но нам было бы интересно узнать не только имена объектов архива, но и их размер до и после сжатия, степень сжатия и метод сжатия.
undefined
32
Задача
Java Multithreading, 7 уровень, 15 лекция
Недоступна
Archiver (13)
Продолжим наш путь к получению содержимого файла архива. Напишем метод getFilesList() в классе ZipFileManager. Он будет возвращать список файлов в архиве, вернее список свойств этих файлов (класс свойств FileProperties мы уже реализовали). Итак: 1. Добавь метод List<FileProperties> getFilesList() th
undefined
8
Задача
Java Multithreading, 7 уровень, 15 лекция
Недоступна
Archiver (14)
Все готово, чтобы реализовать метод execute() класса ZipContentCommand: 1. Выведи сообщение "Просмотр содержимого архива." 2. Создай объект класса ZipFileManager с помощью метода getZipFileManager() 3. Выведи сообщение "Содержимое архива:" 4. Получи список файлов архива с помощью метода getFilesList
undefined
32
Задача
Java Multithreading, 7 уровень, 15 лекция
Недоступна
Archiver (15)
Пора попробовать что-нибудь распаковать. Для этого добавим публичный метод void extractAll(Path outputFolder) throws Exception в класс ZipFileManager. Path outputFolder - это путь, куда мы будем распаковывать наш архив. У тебя уже большой опыт работы с элементами архива и потоками. Так что, я дам то
undefined
32
Задача
Java Multithreading, 7 уровень, 15 лекция
Недоступна
Archiver (16)
Пришло время что-нибудь удалить из архива. Архив очень хитрая штука, нельзя вот так просто взять и удалить какой-то элемент внутри него. Почему? Представь, что мы решили сами придумать свой алгоритм сжатия текста. Посмотрев исходный текст, мы видим, что в нем часто встречается фраза "быть программис
undefined
32
Задача
Java Multithreading, 7 уровень, 15 лекция
Недоступна
Archiver (17)
Осталась ерунда. Добавить добавление файла в архив. Звучит подозрительно, но именно этим мы и займемся. Добавление файлов похоже на удаление, мы создаем временный файл архив, переписываем в него все содержимое старого архива и добавляем новые файлы. Потом заменяем старый файл архива новым. 1. Добавь
undefined
8
Задача
Java Multithreading, 7 уровень, 15 лекция
Недоступна
Archiver (18)
Ты отличный ученик, я немного подправил твой код, можешь использовать этот архиватор для архивации в повседневной жизни. Если будет время и желание, попробуй добавить операцию изменения степени сжатия архива!