Java Servlet无法获取属性文件的绝对路径
有点奇怪为什么会这样。 代码相同,但结果不同Java Servlet无法获取属性文件的绝对路径,java,eclipse,servlets,Java,Eclipse,Servlets,有点奇怪为什么会这样。 代码相同,但结果不同 File file = new File("src/config/ora2.config.properties"); System.out.println(file.getAbsolutePath()); 在常规java类中,它返回正确的路径,但在servlet中,它返回eclipse的安装路径 提前谢谢 已编辑 Properties props = new Properties(); InputStream in = getServletCont
File file = new File("src/config/ora2.config.properties");
System.out.println(file.getAbsolutePath());
在常规java类中,它返回正确的路径,但在servlet中,它返回eclipse的安装路径
提前谢谢
已编辑
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();
}
上面的代码不起作用:(新文件(…)
将路径视为相对于java进程的当前工作目录的路径,不管发生什么。如果您正在构建一个servlet,以便最终部署到独立的服务器系统上,那么您不必依赖于它是一个合理的位置。相反,您应该将此类配置文件放在ap下的某个位置应用程序的WEB-INF
并使用ServletContext
的getResource
或getResourceAsStream
方法访问它,这些方法根据此特定WEB应用程序的位置解析相对路径
Properties props = new Properties();
InputStream in = getServletContext().getResourceAsStream("/WEB-INF/ora2.config.properties");
if(in != null) {
try {
props.load(in);
} finally {
in.close();
}
}
如果您必须以
java.io.File
而不是URL或输入流的形式访问属性(例如,如果您必须将路径传递给无法直接接受流或properties
对象的第三方代码)然后ServletContext还有一个可以使用的。getRealPath
方法,但这需要将web应用程序扩展为磁盘上的真实目录,如果直接从WAR文件运行,它将无法工作。getResource
方法没有此限制。这个问题没有意义。它表明您正在运行从Eclipse运行这个类?是的。我在Eclipse上运行这个类。它会影响吗?我如何获得在servlet中运行的正确绝对路径?您能给出我将从servlet运行的代码吗?而我的属性文件将位于WEB下-INF@user3264438这有帮助吗?该代码还能将修改后的变量保存到属性文件中吗?@user3264438在服务器环境中,您不必假定您有权限在web应用程序中写入文件,或者确实有权限在getServletContext().getAttribute(ServletContext.TEMPDIR)
中提供的临时目录之外的任何其他地方写入文件(这可能不会在重新启动时保持)。如果您需要一个持久配置文件,则最好将其完整路径作为init参数传递到servlet,或者更改体系结构以将数据存储在数据库中而不是文件中。该文件包含数据库参数,例如用户名、密码、driverclass、url。该功能是更改参数,然后连接到另一个数据库。我正在开发一个可以加载、修改和保存属性文件的代码。我可以顺利加载该文件,但当我保存它时,会出现错误。null或系统无法找到该文件。正如您所说,我已将该文件置于WEB-INF下。