在本地 tomcat 中运行的 Web 应用程序中,我试图加载位于 tomcat/webapps/myproject/WEB-INF/folder
中的文件夹 /folder
要做到这一点:
InputStream realPath = getClass().getClassLoader().getResourceAsStream("/folder");
返回 null
。这段代码应该从类路径加载资源,如果我的文件夹所在的路径没有错的话。
无论如何,我将我的文件夹移动到不同的路径,例如 tomcat/webapps/myproject/WEB-INF/classes/folder
或 tomcat/webapps/myproject/WEB-INF/lib/folder
结果相同。
我错过了什么?提前致谢。
关于您的所有回答(谢谢),我用我尝试过的所有方法编辑了我的问题,但结果相同。
一)
String realSource = getServletContext().getRealPath("/folder");
B)
InputStream realPath = getClass().getClassLoader().getResourceAsStream("/folder/fileInFolder");
C)
ServletContext servletContext = (ServletContext)context.getExternalContext().getContext();
String realSource = servletContext.getRealPath("/folder");
我必须说我的文件夹
路径是tomcat/webapps/myproject/WEB-INF/classes/folder
最佳答案
问题是/WEB-INF 不在 WAR 文件的 CLASSPATH 中。
/WEB-INF/classes 在 CLASSPATH 中;/WEB-INF/lib 中的所有 JAR 也是如此。
如果您将需要的文件放入/WEB-INF/classes,WAR 类加载器应该能够找到它。
您不能以这种方式读取目录。它必须是一个文件。
更新:
Anyway, I moved my folder to different paths, such as tomcat/webapps/myproject/WEB-INF/classes/folder or tomcat/webapps/myproject/WEB-INF/lib/folder with the same result. Did I miss something?
是的,您错过了两件事:
- 你的文件夹应该放在一个地方 - 在/WEB-INF/classes 下
- 您无法使用 getResourceAsStream() 访问该文件夹并读取所有内容。它不是那样工作的。您只能以这种方式阅读一个单独的文件。
关于java - 从类路径加载资源时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3889218/