有点想知道为什么会这样。 相同的代码,但结果不同。
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();
}
上面的代码不起作用:(
答案 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
方法没有此限制。