From: Niki Roo Date: Fri, 23 Mar 2018 13:49:03 +0000 (+0100) Subject: New: IOUtils.unzip() X-Git-Url: https://git.nikiroo.be/?a=commitdiff_plain;h=4110f63bcffb5112677fad45a6952314bde713df;p=fanfix-jexer.git New: IOUtils.unzip() --- diff --git a/changelog.md b/changelog.md index 7b44b8b..8892800 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,9 @@ # nikiroo-utils +## Version 4.3.0 + +- New: IOUtils.Unzip() + ## Version 4.2.1 - Fix small bug in Downloader diff --git a/src/be/nikiroo/utils/IOUtils.java b/src/be/nikiroo/utils/IOUtils.java index d833114..3e2f6e7 100644 --- a/src/be/nikiroo/utils/IOUtils.java +++ b/src/be/nikiroo/utils/IOUtils.java @@ -13,6 +13,7 @@ import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; /** @@ -141,6 +142,58 @@ public class IOUtils { } } + /** + * Unzip the given ZIP file into the target directory. + * + * @param zipFile + * the ZIP file + * @param targetDirectory + * the target directory + * + * @return the number of extracted files (not directories) + * + * @throws IOException + * in case of I/O errors + */ + public static long unzip(File zipFile, File targetDirectory) + throws IOException { + long count = 0; + + if (targetDirectory.exists() && targetDirectory.isFile()) { + throw new IOException("Cannot unzip " + zipFile + " into " + + targetDirectory + ": it is not a directory"); + } + + targetDirectory.mkdir(); + if (!targetDirectory.exists()) { + throw new IOException("Cannot create target directory " + + targetDirectory); + } + + FileInputStream in = new FileInputStream(zipFile); + try { + ZipInputStream zipStream = new ZipInputStream(in); + try { + for (ZipEntry entry = zipStream.getNextEntry(); entry != null; entry = zipStream + .getNextEntry()) { + File file = new File(targetDirectory, entry.getName()); + if (entry.isDirectory()) { + file.mkdirs(); + } else { + IOUtils.write(zipStream, file); + count++; + } + } + } finally { + zipStream.close(); + } + } finally { + in.close(); + } + + return count; + } + /** * Write the {@link String} content to {@link File}. *