in src/main/java/org/apache/datasketches/UnzipFiles.java [42:74]
public static void unzip(final String srcZipFile, final String destDir) {
final File dstDir = new File(destDir);
if (dstDir.exists()) { dstDir.delete(); }
dstDir.mkdirs(); //create the output directory
final byte[] buffer = new byte[1024]; //buffer for read and write data to file
try (
FileInputStream fis = new FileInputStream(srcZipFile);
ZipInputStream zis = new ZipInputStream(fis)) {
ZipEntry ze = zis.getNextEntry();
while ((ze != null) && !ze.getName().startsWith("__")) {
final String fileName = ze.getName();
final File newFile = new File(destDir + File.separator + fileName);
if (!newFile.toPath().normalize().startsWith(new File(destDir).toPath())) {
throw new IOException("Bad zip entry");
}
//create directories for sub directories in zip
new File(newFile.getParent()).mkdirs();
try (FileOutputStream fos = new FileOutputStream(newFile)) {
int len;
while ((len = zis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
fos.close();
}
zis.closeEntry(); //close this ZipEntry
ze = zis.getNextEntry();
}
zis.closeEntry(); //close last ZipEntry
} catch (final IOException e) {
e.printStackTrace();
}
}