From b2c5438692c5b56ae435e5c4a1858d603f1b1607 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=94=B3=E5=8A=AD=E6=98=8E?= <626546063@qq.com> Date: Wed, 20 Oct 2021 01:56:24 +0000 Subject: [PATCH] use CopyVisitor --- .../java/cn/hutool/core/util/ZipUtil.java | 51 ++++++------------- 1 file changed, 15 insertions(+), 36 deletions(-) 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 064642772..dc8d55230 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 @@ -10,13 +10,24 @@ import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.IORuntimeException; import cn.hutool.core.io.IoUtil; import cn.hutool.core.io.file.FileSystemUtil; +import cn.hutool.core.io.file.visitor.CopyVisitor; import cn.hutool.core.io.resource.Resource; -import java.io.*; +import java.io.BufferedInputStream; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileFilter; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.nio.charset.Charset; +import java.nio.file.FileAlreadyExistsException; import java.nio.file.FileSystem; -import java.nio.file.*; -import java.nio.file.attribute.BasicFileAttributes; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -88,39 +99,7 @@ public class ZipUtil { if (!Files.isDirectory(appendFilePath)) { Files.copy(appendFilePath, dest, StandardCopyOption.COPY_ATTRIBUTES); } else { - Files.walkFileTree(appendFilePath, new SimpleFileVisitor() { - /** - * 用于保证文件夹拷贝后的效果跟常见压缩软件的效果相同 - */ - private String dirRoot = null; - - @Override - public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { - final Path dest; - if (dirRoot != null) { - dest = zipFileSystem.getPath(root.toString(), dirRoot, File.separator, StrUtil.subAfter(file.toString(), dirRoot, false)); - } else { - dest = zipFileSystem.getPath(root.toString(), file.toString()); - } - Files.copy(file, dest, StandardCopyOption.COPY_ATTRIBUTES); - return FileVisitResult.CONTINUE; - } - - @Override - public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { - final Path dirToCreate; - if (dirRoot == null) { - dirToCreate = zipFileSystem.getPath(root.toString(), dir.getFileName().toString()); - dirRoot = dir.getFileName().toString(); - } else { - dirToCreate = zipFileSystem.getPath(root.toString(), dirRoot, File.separator, StrUtil.subAfter(dir.toString(), dirRoot, false)); - } - if (Files.notExists(dirToCreate)) { - Files.createDirectories(dirToCreate); - } - return FileVisitResult.CONTINUE; - } - }); + Files.walkFileTree(appendFilePath, new CopyVisitor(appendFilePath, zipFileSystem.getPath(zipFilePathStr))); } } catch (FileAlreadyExistsException ignored) { // 文件已存在, 跳过