Servlet无法获取属性文件的绝对路径

时间:2014-08-28 08:19:42

标签: java eclipse servlets

有点想知道为什么会这样。 相同的代码,但结果不同。

File file = new File("src/config/ora2.config.properties");
System.out.println(file.getAbsolutePath());

在常规java类中,它会产生正确的路径,但在servlet中,它会返回eclipse的安装路径。

提前致谢

EDITED

Properties props = new Properties();
InputStream in = getServletContext().getResourceAsStream("WEB-INF/ora2.config.properties");
if(in != null) {
      try {
        props.load(in);

        props.setProperty("username", "temtem");

        FileOutputStream out = new FileOutputStream(in.toString());
        props.store(out, null);
        out.close();
    } finally {
    in.close();
    }

上面的代码不起作用:(

1 个答案:

答案 0 :(得分:0)

new File(...)将路径视为相对于java进程的当前工作目录,无论发生什么情况。如果您要在独立服务器系统上构建用于最终部署的servlet,那么您无法依赖于这是一个合理的位置。相反,您应该将此类配置文件放在应用程序WEB-INF下的某个位置,并使用getResource的{​​{1}}或getResourceAsStream方法来访问它,相对于此特定Web应用程序位置的相对路径。

ServletContext

如果您绝对必须以Properties props = new Properties(); InputStream in = getServletContext().getResourceAsStream("/WEB-INF/ora2.config.properties"); if(in != null) { try { props.load(in); } finally { in.close(); } } 而不是URL或输入流的形式访问属性(例如,如果您必须将路径传递给无法接受流或{{{}的第三方代码1}}对象直接)然后ServletContext也有一个。您可以使用java.io.File方法,但这需要将Web应用程序扩展为磁盘上的真实目录,如果您直接从WAR文件运行,它将无法工作。 Properties方法没有此限制。