为什么ContextClassLoader返回带有感叹号字符的路径?

我尝试在WEB-INF / lib中用jar打开文件

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

在调试器中,我可以看到:

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

为什么文件路径是“!” ? 我认为由于这个原因应用程序无法打开此文件。 如何获得正确的路径? 谢谢。

它意味着什么后来! JAR文件中。

对于myjarresource.jar!/conf/configuration.xml ,使用压缩实用程序(如7-zip)打开myjarresource.jar ,您将看到它包含conf/configuration.xml

在JarURLConnection javadoc中 ,描述了JAR URL的语法:

JAR URL的语法是:jar:!/ {entry}

所以’!’ 表示您’输入’java存档。

编辑:我认为你不能做File file=new File(url.toURI())因为“:”在生成的URI中出现两次并且不符合URI规范 (第2.2和3章)因此这是在文件ctor中被拒绝。