Browse Source

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

tags/release-2.0.0
Decebal Suiu 6 years ago
parent
commit
6e15379429
1 changed files with 26 additions and 49 deletions
  1. 26
    49
      pf4j/src/main/java/ro/fortsoft/pf4j/util/Unzip.java

+ 26
- 49
pf4j/src/main/java/ro/fortsoft/pf4j/util/Unzip.java View File

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

}

Loading…
Cancel
Save