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);