You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Andrew Shcheglov (Jira)" <ji...@apache.org> on 2021/02/06 18:35:00 UTC
[jira] [Commented] (IO-719) PathUtils.copyDirectory() does not work
when source and dest belong to different filesystems
[ https://issues.apache.org/jira/browse/IO-719?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17280257#comment-17280257 ]
Andrew Shcheglov commented on IO-719:
-------------------------------------
Possible solution: stringize relative path inside"resolve()" in "CopyDirectoryVizitor.preVizitDirectory()" and "CopyDirectoryVizitor.vizitFile()", like here:
{code:java}
@Override
public FileVisitResult preVisitDirectory(final Path directory, final BasicFileAttributes attributes)
throws IOException {
final Path newTargetDir = targetDirectory.resolve(sourceDirectory.relativize(directory).toString());
if (Files.notExists(newTargetDir)) {
Files.createDirectory(newTargetDir);
}
return super.preVisitDirectory(directory, attributes);
}
@Override
public FileVisitResult visitFile(final Path sourceFile, final BasicFileAttributes attributes) throws IOException {
final Path targetFile = targetDirectory.resolve(sourceDirectory.relativize(sourceFile).toString());
copy(sourceFile, targetFile);
return super.visitFile(targetFile, attributes);
}
{code}
> PathUtils.copyDirectory() does not work when source and dest belong to different filesystems
> --------------------------------------------------------------------------------------------
>
> Key: IO-719
> URL: https://issues.apache.org/jira/browse/IO-719
> Project: Commons IO
> Issue Type: Bug
> Components: Utilities
> Affects Versions: 2.8.0
> Environment: Java 8, Linux
> Reporter: Andrew Shcheglov
> Priority: Major
>
> This code:
> {code:java}
> @Test
> public void pathUtilsCopyDirFailure() throws IOException {
> FileSystem fs1 = Jimfs.newFileSystem();
> Path srcDir = fs1.getPath("srcDir");
> // Create files/dirs in srcDir
> Path targetDir = Paths.get("targetDir");
> PathUtils.copyDirectory(srcDir, targetDir);
> }
> {code}
> throws exception:
> {noformat}
> java.nio.file.ProviderMismatchException
> at java.base/sun.nio.fs.UnixPath.toUnixPath(UnixPath.java:198)
> at java.base/sun.nio.fs.UnixPath.resolve(UnixPath.java:410)
> at java.base/sun.nio.fs.UnixPath.resolve(UnixPath.java:43)
> at org.apache.commons.io.file.CopyDirectoryVisitor.preVisitDirectory(CopyDirectoryVisitor.java:130)
> at org.apache.commons.io.file.CopyDirectoryVisitor.preVisitDirectory(CopyDirectoryVisitor.java:36)
> at java.base/java.nio.file.Files.walkFileTree(Files.java:2731)
> at java.base/java.nio.file.Files.walkFileTree(Files.java:2796)
> at org.apache.commons.io.file.PathUtils.visitFileTree(PathUtils.java:687)
> at org.apache.commons.io.file.PathUtils.copyDirectory(PathUtils.java:196)
> {noformat}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)