Browse Source

Recursively copy directory with symbolic link

Closes gh-24823
pull/25011/head
Juergen Hoeller 6 years ago
parent
commit
d9eacaa7e8
  1. 11
      spring-core/src/main/java/org/springframework/util/FileSystemUtils.java

11
spring-core/src/main/java/org/springframework/util/FileSystemUtils.java

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2017 the original author or authors. * Copyright 2002-2020 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -24,9 +24,12 @@ import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor; import java.nio.file.SimpleFileVisitor;
import java.nio.file.StandardCopyOption; import java.nio.file.StandardCopyOption;
import java.nio.file.attribute.BasicFileAttributes; import java.nio.file.attribute.BasicFileAttributes;
import java.util.EnumSet;
import org.springframework.lang.Nullable; import org.springframework.lang.Nullable;
import static java.nio.file.FileVisitOption.FOLLOW_LINKS;
/** /**
* Utility methods for working with the file system. * Utility methods for working with the file system.
* *
@ -65,11 +68,11 @@ public abstract class FileSystemUtils {
} }
/** /**
* Delete the supplied {@link File} - for directories, * Delete the supplied {@link File} — for directories,
* recursively delete any nested directories or files as well. * recursively delete any nested directories or files as well.
* @param root the root {@code File} to delete * @param root the root {@code File} to delete
* @return {@code true} if the {@code File} existed and was deleted, * @return {@code true} if the {@code File} existed and was deleted,
* or {@code false} it it did not exist * or {@code false} if it did not exist
* @throws IOException in the case of I/O errors * @throws IOException in the case of I/O errors
* @since 5.0 * @since 5.0
*/ */
@ -123,7 +126,7 @@ public abstract class FileSystemUtils {
BasicFileAttributes srcAttr = Files.readAttributes(src, BasicFileAttributes.class); BasicFileAttributes srcAttr = Files.readAttributes(src, BasicFileAttributes.class);
if (srcAttr.isDirectory()) { if (srcAttr.isDirectory()) {
Files.walkFileTree(src, new SimpleFileVisitor<Path>() { Files.walkFileTree(src, EnumSet.of(FOLLOW_LINKS), Integer.MAX_VALUE, new SimpleFileVisitor<Path>() {
@Override @Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
Files.createDirectories(dest.resolve(src.relativize(dir))); Files.createDirectories(dest.resolve(src.relativize(dir)));

Loading…
Cancel
Save