title: walkFileThree inside JAR-file
body: <p>I'm having trouble to get the root-path inside a JAR-file. I'm writing a method for extracting the content of a Jar/Zip-file to a target directory using Java NIO walkFileThree. The method currently looks like this:</p>
  
  <pre><code>public static void unzip(Path filePath, Path destination) throws IOException {
  Map&lt;String, String&gt; zipProperties = new HashMap&lt;&gt;();
  /* We want to read an existing ZIP File, so we set this to False */
  zipProperties.put("create", "false");
  zipProperties.put("encoding", "UTF-8");
  URI zipFile = URI.create("jar:file:" + filePath.toUri().getPath());
  
  try (FileSystem zipfs = FileSystems.newFileSystem(zipFile, zipProperties)) {
    Path rootPath = zipfs.getPath("/");
    Files.walkFileTree(rootPath, new SimpleFileVisitor&lt;Path&gt;() {
  
      @Override
      public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
  
        Path targetPath = destination.resolve(rootPath.relativize(dir));
        if (!Files.exists(targetPath)) {
          Files.createDirectory(targetPath);
        }
        return FileVisitResult.CONTINUE;
      }
  
      @Override
      public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
  
        Files.copy(file, destination.resolve(rootPath.relativize(file)), StandardCopyOption.COPY_ATTRIBUTES, StandardCopyOption.REPLACE_EXISTING);
        return FileVisitResult.CONTINUE;
      }
    });
  }
  }
  </code></pre>
  
  <p>But I get a exception:</p>
  
  <pre><code>java.nio.file.ProviderMismatchException
  at sun.nio.fs.UnixPath.toUnixPath(UnixPath.java:200) ~[?:1.8.0_45]
  at sun.nio.fs.UnixPath.resolve(UnixPath.java:397) ~[?:1.8.0_45]
  at sun.nio.fs.UnixPath.resolve(UnixPath.java:43) ~[?:1.8.0_45]
  </code></pre>
  
  <p>What is the proper way to get the root-path(/) of the zip file so that I could recursively copy all the content to the destination folder?</p>
  
  <p>Thanks!</p>