diff --git a/pf4j/src/main/java/ro/fortsoft/pf4j/util/Unzip.java b/pf4j/src/main/java/ro/fortsoft/pf4j/util/Unzip.java index fc9f6d0..bcf6c9d 100644 --- a/pf4j/src/main/java/ro/fortsoft/pf4j/util/Unzip.java +++ b/pf4j/src/main/java/ro/fortsoft/pf4j/util/Unzip.java @@ -67,59 +67,36 @@ public class Unzip { log.debug("Extract content of '{}' to '{}'", source, destination); // delete destination file if exists - removeDirectory(destination); - - ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(source)); - - ZipEntry zipEntry; - while ((zipEntry = zipInputStream.getNextEntry()) != null) { - try { - File file = new File(destination, zipEntry.getName()); - - // create intermediary directories - sometimes zip don't add them - File dir = new File(file.getParent()); - dir.mkdirs(); - - if (zipEntry.isDirectory()) { - file.mkdirs(); - } else { - byte[] buffer = new byte[1024]; - int length = 0; - FileOutputStream fos = new FileOutputStream(file); - - while ((length = zipInputStream.read(buffer)) >= 0) { - fos.write(buffer, 0, length); - } - - fos.close(); - } - } catch (FileNotFoundException e) { - log.error("File '{}' not found", zipEntry.getName()); - } - } - - zipInputStream.close(); - } - - private boolean removeDirectory(File directory) { - if (!directory.exists()) { - return true; + if (destination.exists() && destination.isDirectory()) { + FileUtils.delete(destination.toPath()); } - if (!directory.isDirectory()) { - return false; - } - - File[] files = directory.listFiles(); - for (File file : files) { - if (file.isDirectory()) { - removeDirectory(file); - } else { - file.delete(); + try (ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(source))) { + ZipEntry zipEntry; + while ((zipEntry = zipInputStream.getNextEntry()) != null) { + try { + File file = new File(destination, zipEntry.getName()); + + // create intermediary directories - sometimes zip don't add them + File dir = new File(file.getParent()); + dir.mkdirs(); + + if (zipEntry.isDirectory()) { + file.mkdirs(); + } else { + byte[] buffer = new byte[1024]; + int length; + try (FileOutputStream fos = new FileOutputStream(file)) { + while ((length = zipInputStream.read(buffer)) >= 0) { + fos.write(buffer, 0, length); + } + } + } + } catch (FileNotFoundException e) { + log.error("File '{}' not found", zipEntry.getName()); + } } } - - return directory.delete(); } }