From 2bafc6c8a89c94d6c7132f69b0a34f5d3671c708 Mon Sep 17 00:00:00 2001 From: Looly Date: Mon, 24 Oct 2022 22:28:35 +0800 Subject: [PATCH] =?UTF-8?q?FileUtil.copy=EF=BC=8C=E5=BD=93=E6=9D=A5?= =?UTF-8?q?=E6=BA=90=E4=B8=BA=E6=96=87=E4=BB=B6=E6=97=B6=EF=BC=8C=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E6=96=87=E4=BB=B6=E8=80=8C=E9=9D=9E=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + .../java/cn/hutool/core/io/file/FileCopier.java | 15 +++++++++------ .../test/java/cn/hutool/core/io/FileUtilTest.java | 8 ++++++++ 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f7226214e..00668d017 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ ### 🐣新特性 * 【http 】 HttpResponse增加getFileNameFromDisposition方法(pr#2676@Github) +* 【core 】 FileUtil.copy,当来源为文件时,返回文件而非目录 ### 🐞Bug修复 * 【db 】 修复分页时order by截断问题(issue#I5X6FM@Gitee) diff --git a/hutool-core/src/main/java/cn/hutool/core/io/file/FileCopier.java b/hutool-core/src/main/java/cn/hutool/core/io/file/FileCopier.java index 3e7df8220..27fd22d2d 100755 --- a/hutool-core/src/main/java/cn/hutool/core/io/file/FileCopier.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/file/FileCopier.java @@ -168,7 +168,7 @@ public class FileCopier extends SrcToDestCopier{ @Override public File copy() throws IORuntimeException{ final File src = this.src; - final File dest = this.dest; + File dest = this.dest; // check Assert.notNull(src, "Source File is null !"); if (false == src.exists()) { @@ -191,7 +191,7 @@ public class FileCopier extends SrcToDestCopier{ final File subTarget = isCopyContentIfDir ? dest : FileUtil.mkdir(FileUtil.file(dest, src.getName())); internalCopyDirContent(src, subTarget); } else {// 复制文件 - internalCopyFile(src, dest); + dest = internalCopyFile(src, dest); } return dest; } @@ -244,14 +244,15 @@ public class FileCopier extends SrcToDestCopier{ * 2、如果目标是一个已存在的目录,则文件拷贝到此目录下,文件名与原文件名一致 * * - * @param src 源文件,必须为文件 + * @param src 源文件,必须为文件 * @param dest 目标文件,如果非覆盖模式必须为目录 + * @return 目标的目录或文件 * @throws IORuntimeException IO异常 */ - private void internalCopyFile(File src, File dest) throws IORuntimeException { + private File internalCopyFile(File src, File dest) throws IORuntimeException { if (null != copyFilter && false == copyFilter.accept(src)) { //被过滤的文件跳过 - return; + return src; } // 如果已经存在目标文件,切为不覆盖模式,跳过之 @@ -263,7 +264,7 @@ public class FileCopier extends SrcToDestCopier{ if(dest.exists() && false == isOverride) { //非覆盖模式跳过 - return; + return src; } }else { //路径不存在则创建父目录 @@ -283,6 +284,8 @@ public class FileCopier extends SrcToDestCopier{ } catch (IOException e) { throw new IORuntimeException(e); } + + return dest; } //----------------------------------------------------------------------------------------- Private method end } diff --git a/hutool-core/src/test/java/cn/hutool/core/io/FileUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/io/FileUtilTest.java index cc3256863..350bae0a0 100644 --- a/hutool-core/src/test/java/cn/hutool/core/io/FileUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/io/FileUtilTest.java @@ -502,4 +502,12 @@ public class FileUtilTest { path = "test\\aaa.txt"; Assert.assertFalse(FileUtil.isAbsolutePath(path)); } + + @Test + @Ignore + public void copyTest2(){ + final File copy = FileUtil.copy("d:/test/qrcodeCustom.png", "d:/test/pic", false); + // 当复制文件到目标目录的时候,返回复制的目标文件,而非目录 + Console.log(copy); + } }