我实际上有一个带有servlet的程序:
@WebServlet("/Controler")
public class Controler extends HttpServlet {
}
我需要在我的程序中使用属性文件:file.properties
。要加载它,我有一个类:
public class PropLoader {
private final static String m_propertyFileName = "file.properties";
public static String getProperty(String a_key){
String l_value = "";
Properties l_properties = new Properties();
FileInputStream l_input;
try {
l_input = new FileInputStream(m_propertyFileName); // File not found exception
l_properties.load(l_input);
l_value = l_properties.getProperty(a_key);
l_input.close();
} catch (Exception e) {
e.printStackTrace();
}
return l_value;
}
}
我的属性文件位于WebContent文件夹中,我可以使用以下命令访问它:
String path = getServletContext().getRealPath("/file.properties");
但是我不能在另一个类中调用这些方法而不是servlet ...
如何在PropLoader类中访问我的属性文件?
答案 0 :(得分:2)
如果要从webapp结构中读取文件,则应使用ServletContext.getResourceAsStream()
。当然,由于您从webapp加载它,您需要对表示webapp的对象的引用:ServletContext。您可以通过覆盖servlet中的init()
,调用getServletConfig().getServletContext()
并将servlet上下文传递给加载文件的方法来获得此类引用:
@WebServlet("/Controler")
public class Controler extends HttpServlet {
private Properties properties;
@Override
public void init() {
properties = PropLoader.load(getServletConfig().getServletContext());
}
}
public class PropLoader {
private final static String FILE_PATH = "/file.properties";
public static Properties load(ServletContext context) {
Properties properties = new Properties();
properties.load(context.getResourceAsStream(FILE_PATH));
return properties;
}
}
请注意,必须处理一些例外情况。
另一种解决方案是将文件放在WEB-INF/classes
下的已部署的webapp中,并使用ClassLoader加载文件:getClass().getResourceAsStream("/file.properties")
。这样,您就不需要引用ServletContext
。
答案 1 :(得分:1)
我建议使用getResourceAsStream方法(下面的例子)。它需要属性文件位于WAR类路径。
InputStream in = YourServlet.class.getClassLoader().getResourceAsStream(path_and_name);
此致 栾