static boolean unpackZipTo(Path zipfile, Path destDirectory) throws IOException {
        boolean ret = true;

        byte[] bytebuffer = new byte[BUFFERSIZE];
        ZipInputStream zipinputstream = new ZipInputStream(new FileInputStream(zipfile.toFile()));

        ZipEntry zipentry;
        while ((zipentry = zipinputstream.getNextEntry()) != null) {
            Path newFile = destDirectory.resolve(zipentry.getName());

            if (!Files.exists(newFile.getParent(), LinkOption.NOFOLLOW_LINKS)) {
                Files.createDirectories(newFile.getParent());
            }

            if (!Files.isDirectory(newFile, LinkOption.NOFOLLOW_LINKS)) {
                FileOutputStream fileoutputstream = new FileOutputStream(newFile.toFile());

                int bytes;
                while ((bytes = zipinputstream.read(bytebuffer)) > -1) {
                    fileoutputstream.write(bytebuffer, 0, bytes);
                }
                fileoutputstream.close();
            }
            zipinputstream.closeEntry();
        }

        zipinputstream.close();

        return ret;
    }