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

时间:2012-03-02 09:04:55

标签: java resources path web classloader

我尝试使用

在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

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

2 个答案:

答案 0 :(得分:5)

这意味着JAR文件中! 之后的任何内容。

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

答案 1 :(得分:3)

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

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

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

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