diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/io/file/PathUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/io/file/PathUtil.java index aad6fa51b..9412259ec 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/io/file/PathUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/io/file/PathUtil.java @@ -266,6 +266,9 @@ public class PathUtil { public static Path copy(final InputStream src, final Path target, final CopyOption... options) throws IORuntimeException { Assert.notNull(target, "Destination File or directory is null !"); + // 创建级联父目录 + mkParentDirs(target); + try { Files.copy(src, target, options); } catch (final IOException e) { diff --git a/hutool-core/src/test/java/org/dromara/hutool/core/io/file/Issue3557Test.java b/hutool-core/src/test/java/org/dromara/hutool/core/io/file/Issue3557Test.java new file mode 100644 index 000000000..c8fab3da9 --- /dev/null +++ b/hutool-core/src/test/java/org/dromara/hutool/core/io/file/Issue3557Test.java @@ -0,0 +1,22 @@ +package org.dromara.hutool.core.io.file; + +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +import java.nio.file.StandardCopyOption; + +public class Issue3557Test { + @Test + @Disabled + public void copyFileTest() { + // 如果只是文件不存在,则不会报错 + // 如果文件所在目录不存在,则会报错 + FileUtil.copy(FileUtil.getInputStream("d:/test/aaa.xlsx"), FileUtil.file("d:/test2/aaa_copy.xlsx"), StandardCopyOption.REPLACE_EXISTING); + } + + @Test + @Disabled + public void copyFileTest2() { + FileUtil.copy(FileUtil.file("d:/test/aaa.xlsx"), FileUtil.file("d:/test2/aaa_copy.xlsx"), true); + } +}