KYLIN-2051 Fix potentially ineffective call in ZipFileUtils class

Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/ebc08484
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/ebc08484
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/ebc08484

Branch: refs/heads/yang21-hbase1.x
Commit: ebc08484a0575aaa77ebe67cc2a33a6935ea62e5
Parents: 2abf2d3
Author: lidongsjtu <lid...@apache.org>
Authored: Fri Oct 7 18:22:39 2016 +0800
Committer: lidongsjtu <lid...@apache.org>
Committed: Fri Oct 7 18:23:19 2016 +0800

----------------------------------------------------------------------
 .../apache/kylin/common/util/ZipFileUtils.java  | 57 ++++++++++++--------
 1 file changed, 34 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/ebc08484/core-common/src/main/java/org/apache/kylin/common/util/ZipFileUtils.java
----------------------------------------------------------------------
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 525a34c..ef24d85 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
@@ -38,32 +38,41 @@ public class ZipFileUtils {
         if (!validateZipFilename(zipFilename)) {
             throw new RuntimeException("Zipfile must end with .zip");
         }
-        ZipOutputStream zipFile = new ZipOutputStream(new 
FileOutputStream(zipFilename));
-        compressDirectoryToZipfile(normDir(new File(sourceDir).getParent()), 
normDir(sourceDir), zipFile);
-        IOUtils.closeQuietly(zipFile);
+        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());
 
-        ZipInputStream 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);
-                IOUtils.copy(zipInputStream, outputStream);
-                IOUtils.closeQuietly(outputStream);
+                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);
         }
-        IOUtils.closeQuietly(zipInputStream);
-
     }
 
     private static void compressDirectoryToZipfile(String rootDir, String 
sourceDir, ZipOutputStream out) throws IOException {
@@ -74,10 +83,12 @@ public class ZipFileUtils {
                 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());
-                IOUtils.copy(in, out);
-                IOUtils.closeQuietly(in);
+                try {
+                    IOUtils.copy(in, out);
+                } finally {
+                    IOUtils.closeQuietly(in);
+                }
             }
         }
     }

Reply via email to