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

Reply via email to