gpt4 book ai didi

java - 无法从 tomcat 中的 jar 中读取文件

转载 作者:行者123 更新时间:2023-12-01 04:53:28 26 4
gpt4 key购买 nike

我有一个在 tomcat 7 下运行的 Web 应用程序,在其中一个类中,我尝试读取 WEB-INF/lib 文件夹下的 jar 之一中的文件。

URL resourceURL = MyClass.class.getClassLoader().getResource("xml/xslt/master.xsl");
File xslfile = new File(resourceURL.getPath());
AssertUtil.assertTrue(xslfile.exists(),"xsl file not found");

MyClass 和 master.xsl 都位于同一个 jar 中,并且打包没有问题。但上面的代码片段在断言语句中失败,因为 xslfile.exists 返回 false。 URL 正确解析为 jar 内文件的位置,如下所示

file:/<MY_WEBAPP_LOCATION>/MyApp/WEB-INF/lib/MyComponent.jar!/xml/xslt/master.xsl

其中 MY_WEBAPP_LOCATION 对应于我的 tomcat 服务器 webapp 目录的绝对路径。

但是如果我将代码重写如下以读取输入流,则它可以正常工作。

InputStream xslFile = MyClass.class.getClassLoader().getResourceAsStream("xml/xslt/master.xsl");

任何人都可以解释一下是什么阻止了从 jar 资源创建文件,而输入流创建却工作得很好。 tomcat 端是否需要任何额外的权限设置来读取 jar 内的文件?

编辑:再观察一下,如果文件放置在 WEB-INF/classes 下,则使用上述代码创建文件效果很好。仅当将其放置在 WEB-INF/lib 下的 jar 中时才会出现问题

最佳答案

请注意,ClassLoader.getResource 似乎不处理相对路径。请参阅this .

GetResourceAsStream 恰好采用相对于 ClassLoader 的路径(而不是类!!)。我想你很幸运,这里也有同样的东西。

关于java - 无法从 tomcat 中的 jar 中读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14559158/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com