Я пытаюсь использовать NIO FileSystem для доступа к банке внутри другой банки. Вызовите атмосферный Jar моего-outer.jar и внутреннюю мое-inner.jar (Использование Java 8 и Windows 7, но я думаю, что это не проблема)Как создать файловую систему в jar внутри другого jar
Я использую следующий код
String zipfilePath = "c:/testfs/my-outer.jar!/my-inner.jar";
Path path = Paths.get(zipfilePath);
try(ZipFileSystem zipfs = (ZipFileSystem) FileSystems.newFileSystem(path, null))
{ ... }
, но я получаю исключение ниже при попытке создать что newFileSystem:
Exception in thread "main" java.nio.file.FileSystemNotFoundException: C:\testfs\my-outer.jar!\my-inner.jar
Обратите внимание, что, если я просто использовать внешний сосуд в качестве FileSystem, который работает прекрасно, и я могу читать и записывать файлы из него красиво , Это просто, когда я пытаюсь проникнуть во внутренний архив, что проблемы начинаются.
Не поддерживает ли файловая система обозначение JarURLConnection?
От поиска к декомпилированным источникам ZipFileSystem кажется, что он поддерживает только «реальные» файлы. Для вложенных архивов ZIP (jar) вам нужно будет использовать пакет java.util.zip с низким уровнем (или извлечь внутреннюю дугу на диск, хотя я бы не назвал это хорошим решением). – vbezhenar
Не очень хорошая идея. Даже одноуровневая файловая система JAR будет работать очень плохо. – EJP