我jar从中创建了一个,Java project并希望在中使用相同的jar JSP Servlet Project。我正在尝试从我JSP Servlet Project保存的文件中加载一个属性文件,例如sample.properties ,WEB/properties/sample.properties该文件应由.class中的类读取。我正在jarjar 类中使用以下代码来访问它。
jar
Java project
JSP Servlet Project
WEB/properties/sample.properties
Properties prop=new Properties(); prop.load(/WEB-INF/properties/sample.properties);
但是每当我得到的时候fileNotFound exception。 请给我建议解决方案。
fileNotFound exception
这是结构
WEB-INF | lib | myproject.jar | myclass (This class needs to read sample.properties) | properties |sample.properties
该/WEB-INF文件夹 不 属于类路径。因此,此处任何 未经 深思熟虑的答案都ClassLoader#getResourceAsStream()将 永远 无效。仅当属性文件/WEB- INF/classes确实位于类路径的一部分中时才起作用(在像Eclipse这样的IDE中,只需将其放在Java源文件夹根目录中就足够了)。
/WEB-INF
ClassLoader#getResourceAsStream()
/WEB- INF/classes
如果属性文件确实位于您要保存的位置,那么您应该将其作为Web内容资源获取ServletContext#getResourceAsStream()。
ServletContext#getResourceAsStream()
假设您在内HttpServlet,则应该这样做:
HttpServlet
properties.load(getServletContext().getResourceAsStream("/WEB-INF/properties/sample.properties"));
(它getServletContext()是从servlet超类继承的,您不需要自己实现它;因此代码是原样的)
getServletContext()
但是,如果类本身根本不是一个类HttpServlet,那么您真的需要将属性文件移到类路径中。