如何从jar:file URL构造路径?

Gil*_*ili 5 java uri jar

如何构建Path一个jar:fileURL?

调用Paths.get(new URI("jar:file:/C:/foo.jar!/bar.html"))引发FileSystemNotFoundException(注意文件系统丢失,而不是文件本身)。

据我所知,两个文件都存在。有任何想法吗?

Sot*_*lis 6

Paths尝试解决FileSystem包含您的的Path。(实际上,这可能是实现细节。规范只是声明它将检查默认值FileSystem。)如果您尚未注册/创建这样的FileSystem,它将无法找到它。

您可以FileSystem从jar文件中创建一个新文件,然后Path通过该文件访问该条目FileSystem。

Path path = Paths.get("C:/foo.jar");
URI uri = new URI("jar", path.toUri().toString(),  null);

Map<String, String> env = new HashMap<>();
env.put("create", "true");

FileSystem fileSystem = FileSystems.newFileSystem(uri, env);
Path file = fileSystem.getPath("bar.html");
System.out.println(file);
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用

Paths.get(new URI("jar:file:/C:/foo.jar!/bar.html"))
Run Code Online (Sandbox Code Playgroud)

FileSystem完成使用时,请小心正确关闭。

有关ZipFileSystemProvider的更多信息,请参见此处。

  • @tribbloid你能澄清吗?如果确实存在问题,我想更正此问题。 (2认同)