You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@kylin.apache.org by GitBox <gi...@apache.org> on 2018/06/07 01:24:02 UTC

[GitHub] shaofengshi closed pull request #149: KYLIN-3401 change zip compress tool from java.util.zip to Apache comm…

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:
users@infra.apache.org


With regards,
Apache Git Services