Here you can find the source of unzipToFolder(final InputStream inputStream, final File outputFolder)
public static void unzipToFolder(final InputStream inputStream, final File outputFolder) throws IOException
//package com.java2s; /**//from w w w. jav a2 s .c o m * Copyright (C) 2015 BonitaSoft S.A. * BonitaSoft, 32 rue Gustave Eiffel - 38000 Grenoble * This library is free software; you can redistribute it and/or modify it under the terms * of the GNU Lesser General Public License as published by the Free Software Foundation * version 2.1 of the License. * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General Public License along with this * program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. **/ import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Scanner; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; public class Main { private static final String LINE_SEPARATOR = System.getProperty("line.separator"); private static final int BUFFER_SIZE = 100000; public static final String FILE_ENCODING = "UTF-8"; public static void unzipToFolder(final InputStream inputStream, final File outputFolder) throws IOException { final ZipInputStream zipInputstream = new ZipInputStream(inputStream); try { extractZipEntries(zipInputstream, outputFolder); } finally { zipInputstream.closeEntry(); zipInputstream.close(); } } private static void extractZipEntries(final ZipInputStream zipInputstream, final File outputFolder) throws FileNotFoundException, IOException { ZipEntry zipEntry = null; while ((zipEntry = zipInputstream.getNextEntry()) != null) { try { // For each entry, a file is created in the output directory "folder" final File outputFile = new File(outputFolder.getAbsolutePath(), zipEntry.getName()); // If the entry is a directory, it creates in the output folder, and we go to the next entry (continue). if (zipEntry.isDirectory()) { mkdirs(outputFile); continue; } writeZipInputToFile(zipInputstream, outputFile); } finally { zipInputstream.closeEntry(); } } } private static boolean mkdirs(final File file) { if (!file.exists()) { return file.mkdirs(); } return true; } private static void writeZipInputToFile(final ZipInputStream zipInputstream, final File outputFile) throws FileNotFoundException, IOException { // The input is a file. An FileOutputStream is created to write the content of the new file. mkdirs(outputFile.getParentFile()); final FileOutputStream fileOutputStream = new FileOutputStream(outputFile); try { // The contents of the new file, that is read from the ZipInputStream using a buffer (byte []), is written. int bytesRead; final byte[] buffer = new byte[BUFFER_SIZE]; while ((bytesRead = zipInputstream.read(buffer)) > -1) { fileOutputStream.write(buffer, 0, bytesRead); } fileOutputStream.flush(); } catch (final IOException ioe) { // In case of error, the file is deleted outputFile.delete(); throw ioe; } finally { fileOutputStream.close(); } } /** * Read the contents from the given FileInputStream. Return the result as a String. * * @param inputStream * the stream to read from * @return the content read from the inputStream, as a String */ public static String read(final InputStream inputStream) { if (inputStream == null) { throw new IllegalArgumentException("Input stream is null"); } Scanner scanner = null; try { scanner = new Scanner(inputStream, FILE_ENCODING); return read(scanner); } finally { if (scanner != null) { scanner.close(); } } } private static String read(final Scanner scanner) { final StringBuilder text = new StringBuilder(); boolean isFirst = true; while (scanner.hasNextLine()) { if (isFirst) { text.append(scanner.nextLine()); } else { text.append(LINE_SEPARATOR + scanner.nextLine()); } isFirst = false; } return text.toString(); } /** * Read the contents of the given file. * * @param file */ public static String read(final File file) throws IOException { FileInputStream fileInputStream = null; try { fileInputStream = new FileInputStream(file); return read(fileInputStream); } finally { if (fileInputStream != null) { fileInputStream.close(); } } } public static void write(final File file, final byte[] content) throws FileNotFoundException, IOException { FileOutputStream fos = null; BufferedOutputStream bos = null; try { fos = new FileOutputStream(file); bos = new BufferedOutputStream(fos); bos.write(content); bos.flush(); } finally { if (bos != null) { bos.close(); } if (fos != null) { fos.close(); } } } }