From a0f5970037eefc8a41f6f47776ec482fa80048a3 Mon Sep 17 00:00:00 2001 From: Looly Date: Fri, 3 Jul 2020 09:50:05 +0800 Subject: [PATCH] fix ZipUtil --- CHANGELOG.md | 1 + .../main/java/cn/hutool/core/util/ZipUtil.java | 1 + .../java/cn/hutool/core/util/ZipUtilTest.java | 17 +++++++++++++++++ 3 files changed, 19 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ee61344f..f46d18986 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ * 【core 】 修复StrUtil.brief长度问题(pr#930@Github) * 【socket 】 修复AioSession构造超时无效问题(pr#941@Github) * 【setting】 修复GroupSet.contains错误(pr#943@Github) +* 【core 】 修复ZipUtil没有调用finish问题(issue#944@Github) ------------------------------------------------------------------------------------------------------------- ## 5.3.8 (2020-06-16) diff --git a/hutool-core/src/main/java/cn/hutool/core/util/ZipUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/ZipUtil.java index 8967dc8e7..9df4000c6 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/ZipUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/ZipUtil.java @@ -228,6 +228,7 @@ public class ZipUtil { // 调用递归压缩方法进行目录或文件压缩 zip(srcFile, srcRootDir, zipOutputStream, filter); zipOutputStream.flush(); + zipOutputStream.finish(); } } catch (IOException e) { throw new IORuntimeException(e); diff --git a/hutool-core/src/test/java/cn/hutool/core/util/ZipUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/ZipUtilTest.java index 206a24f7b..fd33ae852 100644 --- a/hutool-core/src/test/java/cn/hutool/core/util/ZipUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/ZipUtilTest.java @@ -7,6 +7,9 @@ import org.junit.Ignore; import org.junit.Test; import java.io.File; +import java.io.FileOutputStream; +import java.io.OutputStream; +import java.nio.charset.Charset; /** * {@link ZipUtil}单元测试 @@ -89,4 +92,18 @@ public class ZipUtilTest { //保证正常还原 Assert.assertEquals(data, StrUtil.utf8Str(unGzip2)); } + + @Test + @Ignore + public void zipStreamTest(){ + //https://github.com/looly/hutool/issues/944 + String dir = "d:/test"; + String zip = "d:/test.zip"; + try (OutputStream out = new FileOutputStream(zip)){ + //实际应用中, out 为 HttpServletResponse.getOutputStream + ZipUtil.zip(out, Charset.defaultCharset(), false, null, new File(dir)); + } catch (Exception e) { + e.printStackTrace(); + } + } }