Вот этот код корректно работает и при распаковке архива сохраняет структуру папок внутри архива, но его не принимает валидатор.
public void extractAll(Path outputFolder) throws Exception {
        if (!Files.isRegularFile(zipFile))
            throw new WrongZipFileException();

        if (!Files.isRegularFile(outputFolder))
            Files.createDirectories(outputFolder);

        try (ZipInputStream zis = new ZipInputStream(Files.newInputStream(zipFile))) {
            ZipEntry archiveElement;
            while ((archiveElement = zis.getNextEntry()) != null) {
                Path filePath = outputFolder.resolve(archiveElement.getName());
                if (archiveElement.isDirectory()) Files.createDirectories(filePath);
                else {
                    try (OutputStream fos = Files.newOutputStream(filePath)) {
                        copyData(zis, fos);
                    }
                }
            }
        }
    }
Кое-как решив задачу (угодив валидатору) я перешёл к 16 части и решил посмотреть, какой код является корректным с точки зрения разработчиков и валидатора (код обновился после загрузки 16 задания). Так вот я увидел вот этот код:
public void extractAll(Path outputFolder) throws Exception {
        // Проверяем существует ли zip файл
        if (!Files.isRegularFile(zipFile)) {
            throw new WrongZipFileException();
        }

        try (ZipInputStream zipInputStream = new ZipInputStream(Files.newInputStream(zipFile))) {
            // Создаем директорию вывода, если она не существует
            if (Files.notExists(outputFolder))
                Files.createDirectories(outputFolder);

            // Проходимся по содержимому zip потока (файла)
            ZipEntry zipEntry = zipInputStream.getNextEntry();

            while (zipEntry != null) {
                String fileName = zipEntry.getName();
                Path fileFullName = outputFolder.resolve(fileName);

                // Создаем необходимые директории
                Path parent = fileFullName.getParent();
                if (Files.notExists(parent))
                    Files.createDirectories(parent);

                try (OutputStream outputStream = Files.newOutputStream(fileFullName)) {
                    copyData(zipInputStream, outputStream);
                }
                zipEntry = zipInputStream.getNextEntry();
            }
        }
    }
Данный код принимается валидатором, но не работает! По сути он просто выдаёт ошибку и не даёт распаковать архив в отличии от моего кода. Я тестировал на архиве со вложенными папками, может быть на архивах без папок, в которых только файлы, он будет работать корректно, но такой код всё равно не считается рабочим! Собственно, это вопрос к разработчикам.