Skip to content

Commit cc42f81

Browse files
author
Gary Gregory
committed
Fix PathUtils.copyFileToDirectory(URL,Path,CopyOption[]).
1 parent cc1bc3b commit cc42f81

3 files changed

Lines changed: 20 additions & 5 deletions

File tree

src/changes/changes.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,9 @@ The <action> type attribute can be add,update,fix,remove.
192192
<action issue="IO-776" dev="kinow" type="fix" due-to="Chris Povirk">
193193
Fix parameters to requireNonNull call in DeferredOutputSteam #368.
194194
</action>
195+
<action dev="ggregory" type="fix" due-to="Gary Gregory">
196+
Fix PathUtils.copyFileToDirectory(URL,Path,CopyOption[]).
197+
</action>
195198
<!-- ADD -->
196199
<action type="add" dev="ggregory" due-to="Gary Gregory">
197200
Add GitHub coverage.yml.

src/main/java/org/apache/commons/io/file/PathUtils.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969

7070
import org.apache.commons.io.Charsets;
7171
import org.apache.commons.io.FileUtils;
72+
import org.apache.commons.io.FilenameUtils;
7273
import org.apache.commons.io.IOUtils;
7374
import org.apache.commons.io.Uncheck;
7475
import org.apache.commons.io.file.Counters.PathCounters;
@@ -310,8 +311,9 @@ public static Path copyFileToDirectory(final Path sourceFile, final Path targetD
310311
*/
311312
public static Path copyFileToDirectory(final URL sourceFile, final Path targetDirectory, final CopyOption... copyOptions) throws IOException {
312313
try (InputStream inputStream = sourceFile.openStream()) {
313-
Files.copy(inputStream, targetDirectory.resolve(sourceFile.getFile()), copyOptions);
314-
return targetDirectory;
314+
final Path resolve = targetDirectory.resolve(FilenameUtils.getName(sourceFile.getFile()));
315+
Files.copy(inputStream, resolve, copyOptions);
316+
return resolve;
315317
}
316318
}
317319

src/test/java/org/apache/commons/io/file/PathUtilsTest.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import java.io.OutputStream;
3434
import java.net.URI;
3535
import java.net.URISyntaxException;
36+
import java.net.URL;
3637
import java.nio.charset.StandardCharsets;
3738
import java.nio.file.DirectoryStream;
3839
import java.nio.file.FileAlreadyExistsException;
@@ -51,6 +52,7 @@
5152
import java.util.Map;
5253

5354
import org.apache.commons.io.FileUtils;
55+
import org.apache.commons.io.FilenameUtils;
5456
import org.apache.commons.io.filefilter.NameFileFilter;
5557
import org.apache.commons.io.test.TestUtils;
5658
import org.apache.commons.lang3.ArrayUtils;
@@ -154,8 +156,7 @@ public void testCopyDirectoryForDifferentFilesystemsWithAbsolutePathReverse() th
154156
@Test
155157
public void testCopyDirectoryForDifferentFilesystemsWithRelativePath() throws IOException {
156158
final Path archivePath = Paths.get(TEST_JAR_PATH);
157-
try (FileSystem archive = openArchive(archivePath, false);
158-
final FileSystem targetArchive = openArchive(tempDirPath.resolve(TEST_JAR_NAME), true)) {
159+
try (FileSystem archive = openArchive(archivePath, false); final FileSystem targetArchive = openArchive(tempDirPath.resolve(TEST_JAR_NAME), true)) {
159160
final Path targetDir = targetArchive.getPath("targetDir");
160161
Files.createDirectory(targetDir);
161162
// relative jar -> relative dir
@@ -195,6 +196,15 @@ public void testCopyFile() throws IOException {
195196
assertEquals(Files.size(sourceFile), Files.size(targetFile));
196197
}
197198

199+
@Test
200+
public void testCopyURL() throws IOException {
201+
final Path sourceFile = Paths.get("src/test/resources/org/apache/commons/io/dirs-1-file-size-1/file-size-1.bin");
202+
final URL url = new URL("file:///" + FilenameUtils.getPath(sourceFile.toAbsolutePath().toString()) + sourceFile.getFileName());
203+
final Path targetFile = PathUtils.copyFileToDirectory(url, tempDirPath);
204+
assertTrue(Files.exists(targetFile));
205+
assertEquals(Files.size(sourceFile), Files.size(targetFile));
206+
}
207+
198208
@Test
199209
public void testCreateDirectoriesAlreadyExists() throws IOException {
200210
assertEquals(tempDirPath.getParent(), PathUtils.createParentDirectories(tempDirPath));
@@ -476,7 +486,7 @@ public void testTouch() throws IOException {
476486
}
477487
assertEquals(1, Files.size(file), "Wrote one byte to file");
478488
final long y2k = new GregorianCalendar(2000, 0, 1).getTime().getTime();
479-
setLastModifiedMillis(file, y2k); // 0L fails on Win98
489+
setLastModifiedMillis(file, y2k); // 0L fails on Win98
480490
assertEquals(y2k, getLastModifiedMillis(file), "Bad test: set lastModified set incorrect value");
481491
final long nowMillis = System.currentTimeMillis();
482492
PathUtils.touch(file);

0 commit comments

Comments
 (0)