This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-io.git


The following commit(s) were added to refs/heads/master by this push:
     new cc42f81b Fix PathUtils.copyFileToDirectory(URL,Path,CopyOption[]).
cc42f81b is described below

commit cc42f81bc3c5b3462cb910d4b88d69ba7e06f302
Author: Gary Gregory <gardgreg...@gmail.com>
AuthorDate: Mon Jul 25 09:44:01 2022 -0400

    Fix PathUtils.copyFileToDirectory(URL,Path,CopyOption[]).
---
 src/changes/changes.xml                                  |  3 +++
 src/main/java/org/apache/commons/io/file/PathUtils.java  |  6 ++++--
 .../java/org/apache/commons/io/file/PathUtilsTest.java   | 16 +++++++++++++---
 3 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 21414100..87445201 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -192,6 +192,9 @@ The <action> type attribute can be add,update,fix,remove.
       <action issue="IO-776" dev="kinow" type="fix" due-to="Chris Povirk">
         Fix parameters to requireNonNull call in DeferredOutputSteam #368.
       </action>
+      <action dev="ggregory" type="fix" due-to="Gary Gregory">
+        Fix PathUtils.copyFileToDirectory(URL,Path,CopyOption[]).
+      </action>
       <!-- ADD -->
       <action type="add" dev="ggregory" due-to="Gary Gregory">
         Add GitHub coverage.yml.
diff --git a/src/main/java/org/apache/commons/io/file/PathUtils.java 
b/src/main/java/org/apache/commons/io/file/PathUtils.java
index 18d06e50..59e45532 100644
--- a/src/main/java/org/apache/commons/io/file/PathUtils.java
+++ b/src/main/java/org/apache/commons/io/file/PathUtils.java
@@ -69,6 +69,7 @@ import java.util.stream.Stream;
 
 import org.apache.commons.io.Charsets;
 import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.io.Uncheck;
 import org.apache.commons.io.file.Counters.PathCounters;
@@ -310,8 +311,9 @@ public final class PathUtils {
      */
     public static Path copyFileToDirectory(final URL sourceFile, final Path 
targetDirectory, final CopyOption... copyOptions) throws IOException {
         try (InputStream inputStream = sourceFile.openStream()) {
-            Files.copy(inputStream, 
targetDirectory.resolve(sourceFile.getFile()), copyOptions);
-            return targetDirectory;
+            final Path resolve = 
targetDirectory.resolve(FilenameUtils.getName(sourceFile.getFile()));
+            Files.copy(inputStream, resolve, copyOptions);
+            return resolve;
         }
     }
 
diff --git a/src/test/java/org/apache/commons/io/file/PathUtilsTest.java 
b/src/test/java/org/apache/commons/io/file/PathUtilsTest.java
index 4f2100e1..12c1ec26 100644
--- a/src/test/java/org/apache/commons/io/file/PathUtilsTest.java
+++ b/src/test/java/org/apache/commons/io/file/PathUtilsTest.java
@@ -33,6 +33,7 @@ import java.io.IOException;
 import java.io.OutputStream;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.net.URL;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.DirectoryStream;
 import java.nio.file.FileAlreadyExistsException;
@@ -51,6 +52,7 @@ import java.util.Iterator;
 import java.util.Map;
 
 import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.io.filefilter.NameFileFilter;
 import org.apache.commons.io.test.TestUtils;
 import org.apache.commons.lang3.ArrayUtils;
@@ -154,8 +156,7 @@ public class PathUtilsTest extends AbstractTempDirTest {
     @Test
     public void testCopyDirectoryForDifferentFilesystemsWithRelativePath() 
throws IOException {
         final Path archivePath = Paths.get(TEST_JAR_PATH);
-        try (FileSystem archive = openArchive(archivePath, false);
-            final FileSystem targetArchive = 
openArchive(tempDirPath.resolve(TEST_JAR_NAME), true)) {
+        try (FileSystem archive = openArchive(archivePath, false); final 
FileSystem targetArchive = openArchive(tempDirPath.resolve(TEST_JAR_NAME), 
true)) {
             final Path targetDir = targetArchive.getPath("targetDir");
             Files.createDirectory(targetDir);
             // relative jar -> relative dir
@@ -195,6 +196,15 @@ public class PathUtilsTest extends AbstractTempDirTest {
         assertEquals(Files.size(sourceFile), Files.size(targetFile));
     }
 
+    @Test
+    public void testCopyURL() throws IOException {
+        final Path sourceFile = 
Paths.get("src/test/resources/org/apache/commons/io/dirs-1-file-size-1/file-size-1.bin");
+        final URL url = new URL("file:///" + 
FilenameUtils.getPath(sourceFile.toAbsolutePath().toString()) + 
sourceFile.getFileName());
+        final Path targetFile = PathUtils.copyFileToDirectory(url, 
tempDirPath);
+        assertTrue(Files.exists(targetFile));
+        assertEquals(Files.size(sourceFile), Files.size(targetFile));
+    }
+
     @Test
     public void testCreateDirectoriesAlreadyExists() throws IOException {
         assertEquals(tempDirPath.getParent(), 
PathUtils.createParentDirectories(tempDirPath));
@@ -476,7 +486,7 @@ public class PathUtilsTest extends AbstractTempDirTest {
         }
         assertEquals(1, Files.size(file), "Wrote one byte to file");
         final long y2k = new GregorianCalendar(2000, 0, 1).getTime().getTime();
-        setLastModifiedMillis(file, y2k);  // 0L fails on Win98
+        setLastModifiedMillis(file, y2k); // 0L fails on Win98
         assertEquals(y2k, getLastModifiedMillis(file), "Bad test: set 
lastModified set incorrect value");
         final long nowMillis = System.currentTimeMillis();
         PathUtils.touch(file);

Reply via email to