Skip to content

Instantly share code, notes, and snippets.

@christoph-daehne
Last active February 22, 2017 16:40
Show Gist options
  • Save christoph-daehne/e7ecf4abf26da41072b31e0431d841e7 to your computer and use it in GitHub Desktop.
Save christoph-daehne/e7ecf4abf26da41072b31e0431d841e7 to your computer and use it in GitHub Desktop.
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