Create directory first
authorMathieu Baudier <mbaudier@argeo.org>
Tue, 9 Aug 2022 07:02:27 +0000 (09:02 +0200)
committerMathieu Baudier <mbaudier@argeo.org>
Tue, 9 Aug 2022 07:02:27 +0000 (09:02 +0200)
org.argeo.util/src/org/argeo/util/FsUtils.java

index 23839db74c3f93c8c2f82a740089c39499b756d8..cd61b56198fc2428fcf96ce02be5bd6656497f34 100644 (file)
@@ -10,10 +10,7 @@ import java.nio.file.attribute.BasicFileAttributes;
 /** Utilities around the standard Java file abstractions. */
 public class FsUtils {
 
-       /**
-        * Deletes this path, recursively if needed. Does nothing if the path does not
-        * exist.
-        */
+       /** Deletes this path, recursively if needed. */
        public static void copyDirectory(Path source, Path target) {
                if (!Files.exists(source) || !Files.isDirectory(source))
                        throw new IllegalArgumentException(source + " is not a directory");
@@ -22,13 +19,13 @@ public class FsUtils {
                try {
                        Files.createDirectories(target);
                        Files.walkFileTree(source, new SimpleFileVisitor<Path>() {
+
                                @Override
-                               public FileVisitResult postVisitDirectory(Path directory, IOException e) throws IOException {
-                                       if (e != null)
-                                               throw e;
+                               public FileVisitResult preVisitDirectory(Path directory, BasicFileAttributes attrs) throws IOException {
                                        Path relativePath = source.relativize(directory);
                                        Path targetDirectory = target.resolve(relativePath);
-                                       Files.createDirectory(targetDirectory);
+                                       if (!Files.exists(targetDirectory))
+                                               Files.createDirectory(targetDirectory);
                                        return FileVisitResult.CONTINUE;
                                }