shaofengshi closed pull request #149: KYLIN-3401 change zip compress tool from
java.util.zip to Apache comm…
URL: https://github.com/apache/kylin/pull/149
This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:
As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):
diff --git
a/core-common/src/main/java/org/apache/kylin/common/util/ZipFileUtils.java
b/core-common/src/main/java/org/apache/kylin/common/util/ZipFileUtils.java
index a2326ee4ae..e53ad1697b 100644
--- a/core-common/src/main/java/org/apache/kylin/common/util/ZipFileUtils.java
+++ b/core-common/src/main/java/org/apache/kylin/common/util/ZipFileUtils.java
@@ -19,14 +19,13 @@
package org.apache.kylin.common.util;
import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
import java.io.IOException;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipInputStream;
-import java.util.zip.ZipOutputStream;
-import org.apache.commons.io.IOUtils;
+import org.apache.commons.compress.archivers.ArchiveException;
+import org.apache.commons.compress.archivers.ArchiveStreamFactory;
+import org.apache.commons.compress.archivers.examples.Archiver;
+import org.apache.commons.compress.archivers.examples.Expander;
+import org.apache.commons.compress.archivers.zip.ZipFile;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -35,80 +34,25 @@
private static final Logger logger =
LoggerFactory.getLogger(ZipFileUtils.class);
- public static void compressZipFile(String sourceDir, String zipFilename)
throws IOException {
- if (!validateZipFilename(zipFilename)) {
- throw new RuntimeException("Zipfile must end with .zip");
- }
- ZipOutputStream zipFile = null;
- try {
- zipFile = new ZipOutputStream(new FileOutputStream(zipFilename));
- compressDirectoryToZipfile(normDir(new
File(sourceDir).getParent()), normDir(sourceDir), zipFile);
- } finally {
- IOUtils.closeQuietly(zipFile);
- }
- }
-
- public static void decompressZipfileToDirectory(String zipFileName, File
outputFolder) throws IOException {
- ZipInputStream zipInputStream = null;
- try {
- zipInputStream = new ZipInputStream(new
FileInputStream(zipFileName));
- ZipEntry zipEntry = null;
- while ((zipEntry = zipInputStream.getNextEntry()) != null) {
- logger.info("decompressing " + zipEntry.getName() + " is
directory:" + zipEntry.isDirectory() + " available: " +
zipInputStream.available());
-
- File temp = new File(outputFolder, zipEntry.getName());
- if (zipEntry.isDirectory()) {
- temp.mkdirs();
- } else {
- temp.getParentFile().mkdirs();
- temp.createNewFile();
- temp.setLastModified(zipEntry.getTime());
- FileOutputStream outputStream = new FileOutputStream(temp);
- try {
- IOUtils.copy(zipInputStream, outputStream);
- } finally {
- IOUtils.closeQuietly(outputStream);
- }
- }
- }
- } finally {
- IOUtils.closeQuietly(zipInputStream);
+ public static void compressZipFile(String sourceDir, String zipFileName)
throws IOException, ArchiveException {
+ if (!validateZipFilename(zipFileName)) {
+ throw new RuntimeException("Zip file must end with .zip");
}
+ Archiver archiver = new Archiver();
+ archiver.create(ArchiveStreamFactory.ZIP, new File(zipFileName), new
File(sourceDir));
}
- private static void compressDirectoryToZipfile(String rootDir, String
sourceDir, ZipOutputStream out) throws IOException {
- File[] files = new File(sourceDir).listFiles();
- if (files == null)
- return;
- for (File sourceFile : files) {
- if (sourceFile.isDirectory()) {
- compressDirectoryToZipfile(rootDir, sourceDir +
normDir(sourceFile.getName()), out);
- } else {
- ZipEntry entry = new
ZipEntry(normDir(StringUtils.isEmpty(rootDir) ? sourceDir :
sourceDir.replace(rootDir, "")) + sourceFile.getName());
- entry.setTime(sourceFile.lastModified());
- out.putNextEntry(entry);
- FileInputStream in = new FileInputStream(sourceDir +
sourceFile.getName());
- try {
- IOUtils.copy(in, out);
- } finally {
- IOUtils.closeQuietly(in);
- }
- }
+ public static void decompressZipfileToDirectory(String zipFileName, File
outputFolder)
+ throws IOException, ArchiveException {
+ if (!validateZipFilename(zipFileName)) {
+ throw new RuntimeException("Zip file must end with .zip");
}
+ Expander expander = new Expander();
+ ZipFile zipFile = new ZipFile(zipFileName);
+ expander.expand(zipFile, outputFolder);
}
private static boolean validateZipFilename(String filename) {
- if (!StringUtils.isEmpty(filename) &&
filename.trim().toLowerCase().endsWith(".zip")) {
- return true;
- }
-
- return false;
- }
-
- private static String normDir(String dirName) {
- if (!StringUtils.isEmpty(dirName) &&
!dirName.endsWith(File.separator)) {
- dirName = dirName + File.separator;
- }
- return dirName;
+ return !StringUtils.isEmpty(filename) &&
filename.trim().toLowerCase().endsWith(".zip");
}
}
diff --git a/pom.xml b/pom.xml
index 25a0297a4c..e0bd0e0023 100644
--- a/pom.xml
+++ b/pom.xml
@@ -99,6 +99,7 @@
<commons-lang3.version>3.4</commons-lang3.version>
<commons-email.version>1.5</commons-email.version>
<commons-validator.version>1.4.0</commons-validator.version>
+ <commons-compress>1.17</commons-compress>
<!-- Utility -->
<log4j.version>1.2.17</log4j.version>
@@ -661,6 +662,11 @@
<artifactId>commons-validator</artifactId>
<version>${commons-validator.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-compress</artifactId>
+ <version>${commons-compress}</version>
+ </dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services