Browse Source

Close the input stream after read it and remove redundant util method

pull/159/head
Decebal Suiu 7 years ago
parent
commit
6e15379429
  1. 75
      pf4j/src/main/java/ro/fortsoft/pf4j/util/Unzip.java

75
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); log.debug("Extract content of '{}' to '{}'", source, destination);
// delete destination file if exists // delete destination file if exists
removeDirectory(destination); if (destination.exists() && destination.isDirectory()) {
FileUtils.delete(destination.toPath());
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 (!directory.isDirectory()) { try (ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(source))) {
return false; ZipEntry zipEntry;
} while ((zipEntry = zipInputStream.getNextEntry()) != null) {
try {
File[] files = directory.listFiles(); File file = new File(destination, zipEntry.getName());
for (File file : files) {
if (file.isDirectory()) { // create intermediary directories - sometimes zip don't add them
removeDirectory(file); File dir = new File(file.getParent());
} else { dir.mkdirs();
file.delete();
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();
} }
} }

Loading…
Cancel
Save