/**
* Извлечение содержимого архива
*/
public void extractAll(Path outputFolder) throws Exception {
if (!Files.isRegularFile(zipFile))
throw new WrongZipFileException();
if (Files.notExists(outputFolder))
Files.createDirectories(outputFolder);
//поток в сторону архива на чтение
try (ZipInputStream zis = new ZipInputStream(Files.newInputStream(zipFile))) {
ZipEntry zipEntry;
while ((zipEntry = zis.getNextEntry()) != null) { //получение следующего элемента из архива и проверка на null
Path file_name_abs = outputFolder.resolve(zipEntry.getName()); //полный путь для разархивации с учётом вложенности в архиве
if (zipEntry.isDirectory()) { // проверка zipEntry на дирректорию
if (Files.notExists(file_name_abs)) { //если это дирректория и она не добавлена...
Files.createDirectories(file_name_abs); // то создаем её
}
zis.closeEntry(); //завершаем работу с текущим zipEntry - элементом массива, на следующим цикле получим новый
continue; //завершаем текущую итерацию на этой строке, сразу переходим на следующую. Так как код ниже только для файлов !!!
}
copyData(zis, Files.newOutputStream(file_name_abs)); //если проверка выше на папку не пройдена => это файл, разархивируем его
zis.closeEntry(); //завершаем работу с текущим zipEntry
}
}
}package com.javarush.task.task31.task3110;
import com.javarush.task.task31.task3110.exception.WrongZipFileException;
import java.io.IOException;
//C:\JavaProjects\Trash_Projects\ZIP_TEST\ZIP_ARCH\arch1.zip
//C:\JavaProjects\Trash_Projects\ZIP_TEST\ZIP_UNARCH
public class Archiver {
public static void main(String[] args) throws IOException {
Operation operation = null;
do {
try {
operation = askOperation();
CommandExecutor.execute(operation);
} catch (WrongZipFileException e) {
ConsoleHelper.writeMessage("Вы не выбрали файл архива или выбрали неверный файл.");
} catch (Exception e) {
ConsoleHelper.writeMessage("Произошла ошибка. Проверьте введенные данные.");
}
} while (operation != Operation.EXIT);
}
public static Operation askOperation() throws IOException {
ConsoleHelper.writeMessage("");
ConsoleHelper.writeMessage("Выберите операцию:");
ConsoleHelper.writeMessage(String.format("\t %d - упаковать файлы в архив", Operation.CREATE.ordinal()));
ConsoleHelper.writeMessage(String.format("\t %d - добавить файл в архив", Operation.ADD.ordinal()));
ConsoleHelper.writeMessage(String.format("\t %d - удалить файл из архива", Operation.REMOVE.ordinal()));
ConsoleHelper.writeMessage(String.format("\t %d - распаковать архив", Operation.EXTRACT.ordinal()));
ConsoleHelper.writeMessage(String.format("\t %d - просмотреть содержимое архива", Operation.CONTENT.ordinal()));
ConsoleHelper.writeMessage(String.format("\t %d - выход", Operation.EXIT.ordinal()));
return Operation.values()[ConsoleHelper.readInt()];
}
}