【问题标题】:Why ContextClassLoader returns path with exclamation character?为什么 ContextClassLoader 返回带有感叹号的路径?
【发布时间】:2012-03-20 19:03:28
【问题描述】:

我尝试使用

在 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

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

【问题讨论】:

  • 那么,如果您的应用程序无法打开文件 - 堆栈跟踪是什么样的?

标签: java resources path web classloader


【解决方案1】:

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

如果是myjarresource.jar!/conf/configuration.xml,使用7-zip 等压缩工具打开myjarresource.jar,您会看到其中包含conf/configuration.xml

【讨论】:

  • 是的,因为该位置没有物理文件。如果要读取 JAR 文件的内容,则必须使用 JAR API。或者,将您的 JAR 文件设置在类路径中,您将可以直接读取 conf/configuration.xml
【解决方案2】:

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

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

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

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

【讨论】:

  • 如果文件在 jar 中,如何加载文件夹中的所有文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-22
  • 2018-11-14
  • 2013-09-21
相关资源
最近更新 更多