You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by sh...@apache.org on 2018/06/07 01:25:49 UTC

[kylin] 04/04: KYLIN-3401 change zip compress tool from java.util.zip to Apache commons-compress library

This is an automated email from the ASF dual-hosted git repository.

shaofengshi pushed a commit to branch 2.3.x
in repository https://gitbox.apache.org/repos/asf/kylin.git

commit 68f7e717bb3a00be6acce5dc360c1bb9ba8b6b92
Author: Chao Long <wa...@qq.com>
AuthorDate: Wed Jun 6 16:03:23 2018 +0800

    KYLIN-3401 change zip compress tool from java.util.zip to Apache commons-compress library
---
 .../org/apache/kylin/common/util/ZipFileUtils.java | 92 +++++-----------------
 pom.xml                                            |  6 ++
 2 files changed, 24 insertions(+), 74 deletions(-)

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 a2326ee..e53ad16 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 @@ public class ZipFileUtils {
 
     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 9e86993..8dd137f 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 @@
                 <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>
                 <version>${freemarker.version}</version>

-- 
To stop receiving notification emails like this one, please contact
shaofengshi@apache.org.