/**
     * Извлечение содержимого архива
     */
    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
            }
        }
    }