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

use*_*818 6 java resources path classloader web

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

Thread.currentThread().getContextClassLoader();
 URL url=classLoader.getResource(myconfig);
Run Code Online (Sandbox Code Playgroud)

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

jar:file:/C:/apache-tomcat/webapps/mywebapp/WEB-INF/lib/myjarresource.jar! 
 /conf/configuration.xml
Run Code Online (Sandbox Code Playgroud)

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

Jer*_*ome 6

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

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

所以 '!' 表示您“输入”了 java 存档。

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


ada*_*shr 5

这意味着无论发生什么事之后!内部的JAR文件。

如果是这种情况myjarresource.jar!/conf/configuration.xml,请myjarresource.jar使用压缩实用程序(例如7-zip)打开,您会看到其中包含conf/configuration.xml