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 <[email protected]>
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);