Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Servlet无法获取属性文件的绝对路径_Java_Eclipse_Servlets - Fatal编程技术网

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下。