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.