我有一个在 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 中