虽然不太建议这样做,但是可以使用jar:
URI方案读取基本上是重命名为.zip的文档格式(.ear, .war, .jar等)。
例如,当uri
变量评估为单个顶级存档文件时,如uri
等于jar:file:///Users/justingarrick/Desktop/test/my_war.war!/
时,下面的代码可以很好地工作:
private FileSystem createZipFileSystem(Path path) throws IOException {
URI uri = URI.create("jar:" + path.toUri().toString());
FileSystem fs;
try {
fs = FileSystems.getFileSystem(uri);
} catch (FileSystemNotFoundException e) {
fs = FileSystems.newFileSystem(uri, new HashMap<>());
}
return fs;
}
然而,当URI包含嵌套归档文件时,例如当uri等于jar:jar:file:///Users/justingarrick/Desktop/test/my_war.war!/some_jar.jar! /(一个.war中的.jar)时,getFileSystem和newFileSystem调用将失败,并显示IllegalArgumentException。 是否存在用于嵌套存档文件的有效java.net.URI方案?
!
的错误(尝试将那个感叹号添加到目录名称的末尾,然后将其添加到类路径中),因此我的直觉是说你需要做一些工作才能让它按照你想要的方式工作。 - ngreen/*
* 提醒:我们不处理嵌套的JAR URL
*/
... - Jonas Berlin