Почему ContextClassLoader возвращает путь с восклицательным знаком? - PullRequest
5 голосов
/ 02 марта 2012

Я пытаюсь открыть файл в jar в WEB-INF / lib с помощью

Thread.currentThread().getContextClassLoader();
 URL url=classLoader.getResource(myconfig);

В отладчике я вижу:

jar:file:/C:/apache-tomcat/webapps/mywebapp/WEB-INF/lib/myjarresource.jar! 
 /conf/configuration.xml

Почему в пути к файлу стоит "!" ? Я думаю, что по этой причине приложение не может открыть этот файл. Как получить правильный путь? Спасибо.

Ответы [ 2 ]

5 голосов
/ 02 марта 2012

Это означает, что после ! находится внутри файла JAR.

В случае myjarresource.jar!/conf/configuration.xml откройте myjarresource.jar, используя утилиту сжатия, например 7-zip, и вы увидите, что она содержит conf/configuration.xml.

3 голосов
/ 02 марта 2012

В javadoc JarURLConnection описан синтаксис URL-адреса JAR:

Синтаксис URL-адреса JAR: jar:! / {Entry}

Так что!означает, что вы «входите» в архив Java.

Редактировать: Я считаю, что вы не можете сделать File file=new File(url.toURI()) из-за «:», которое появляется дважды в сгенерированном URI и не соответствует URI спецификации (главы 2.2 и 3), поэтому это отклонено в файле ctor.

...