From 7d5e474e0d2df480bcdccf1544065f52835bcad8 Mon Sep 17 00:00:00 2001 From: Moran Avigdor Date: Tue, 31 Mar 2020 14:04:55 +0300 Subject: [PATCH] Recursively copy directory with symbolic link The following modification will also recursively traverse the directory that the symbolic link points to. This modification is not proposed for deleteRecursively, since it can be harmful if not intended. This modification relates to the following commit: Consistent use of NIO.2 for file read/write interactions Issue: SPR-15748 12114a9 --- .../main/java/org/springframework/util/FileSystemUtils.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/spring-core/src/main/java/org/springframework/util/FileSystemUtils.java b/spring-core/src/main/java/org/springframework/util/FileSystemUtils.java index f9e4f69980..3b5c106f6f 100644 --- a/spring-core/src/main/java/org/springframework/util/FileSystemUtils.java +++ b/spring-core/src/main/java/org/springframework/util/FileSystemUtils.java @@ -24,8 +24,10 @@ import java.nio.file.Path; import java.nio.file.SimpleFileVisitor; import java.nio.file.StandardCopyOption; import java.nio.file.attribute.BasicFileAttributes; +import java.util.EnumSet; import org.springframework.lang.Nullable; +import static java.nio.file.FileVisitOption.FOLLOW_LINKS; /** * Utility methods for working with the file system. @@ -123,7 +125,7 @@ public abstract class FileSystemUtils { BasicFileAttributes srcAttr = Files.readAttributes(src, BasicFileAttributes.class); if (srcAttr.isDirectory()) { - Files.walkFileTree(src, new SimpleFileVisitor() { + Files.walkFileTree(src, EnumSet.of(FOLLOW_LINKS), Integer.MAX_VALUE, new SimpleFileVisitor() { @Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { Files.createDirectories(dest.resolve(src.relativize(dir)));