Last active
February 22, 2017 16:40
-
-
Save christoph-daehne/e7ecf4abf26da41072b31e0431d841e7 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.io.*; | |
import java.util.zip.ZipEntry; | |
import java.util.zip.ZipInputStream; | |
public class ZipUtils { | |
/** | |
* @param source zip stream | |
* @param target target directory | |
* @throws IOException extraction failed | |
*/ | |
public static void unzip(InputStream source, File target) throws IOException { | |
final ZipInputStream zipStream = new ZipInputStream(source); | |
ZipEntry nextEntry; | |
while ((nextEntry = zipStream.getNextEntry()) != null) { | |
final String name = nextEntry.getName(); | |
// only extract files | |
if (!name.endsWith("/")) { | |
final File nextFile = new File(target, name); | |
// create directories | |
final File parent = nextFile.getParentFile(); | |
if (parent != null) { | |
parent.mkdirs(); | |
} | |
// write file | |
try (OutputStream targetStream = new FileOutputStream(nextFile)) { | |
copy(zipStream, targetStream); | |
} | |
} | |
} | |
} | |
private static void copy(final InputStream source, final OutputStream target) throws IOException { | |
final int bufferSize = 4 * 1024; | |
final byte[] buffer = new byte[bufferSize]; | |
int nextCount; | |
while ((nextCount = source.read(buffer)) >= 0) { | |
target.write(buffer, 0, nextCount); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment