|
|
|
@ -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(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|