Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.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
如何从JavaEEWeb应用程序访问属性文件?_Java_Eclipse_Properties - Fatal编程技术网

如何从JavaEEWeb应用程序访问属性文件?

如何从JavaEEWeb应用程序访问属性文件?,java,eclipse,properties,Java,Eclipse,Properties,我在Eclipse中创建了一个动态web项目。我在src目录中创建了一个属性文件: <project-root>/src/props.properties 我应该如何访问属性文件? 它应该在哪里 提前感谢。您的项目是否设置为自动生成?如果是这样(或者您正在手动构建),请检查props.properties是否显示在项目的output文件夹中(在Eclipse中,这通常是“bin”,但可能是WebRoot或其他内容,具体取决于项目的设置方式) 当项目构建时,它应该复制配置文件以及编译

我在Eclipse中创建了一个动态web项目。我在src目录中创建了一个属性文件:

<project-root>/src/props.properties
我应该如何访问属性文件? 它应该在哪里


提前感谢。

您的项目是否设置为自动生成?如果是这样(或者您正在手动构建),请检查
props.properties
是否显示在项目的output文件夹中(在Eclipse中,这通常是“bin”,但可能是WebRoot或其他内容,具体取决于项目的设置方式)


当项目构建时,它应该复制配置文件以及编译的类、JSP等。但是,我相信默认情况下,文件读取器使用JVM的主目录作为其源。在Eclipse的情况下,这意味着您的
props.properties
文件必须位于项目根目录中,即不是“src”文件夹中。

如果是web应用程序,则属性将部署到web-INF/类中,并可以使用类加载器加载

InputStream in = {NameOfClassWhereThisisInvoked}.class.getResourceAsStream("/props.properties");
properties.load(in);
in.close();
事实上,无论它是否是一个网络应用程序,它都应该工作


我假设src被定义为一个源文件夹

还有另一种方法,如下所示:

File file = new File(session.getServletContext().getRealPath("/") + "props.properties");

您可以给出相对于EclipseWeb应用程序项目的“WebContent”文件夹的任何路径,而不是“props.properties”

下面是从类路径中的任何位置加载属性文件的正确方法

private Properties getPropertiesFromClasspath(String propFileName)
                                                                throws IOException
{
    Properties props = new Properties();
    InputStream inputStream =
    this.getClass().getClassLoader().getResourceAsStream(propFileName);

    if (inputStream == null)
    {
        throw new FileNotFoundException("property file '" + propFileName
      + "' not found in the classpath");
}

props.load(inputStream);
return props;
}
您可以创建一个单例类,在第一次访问时将属性加载到内存中,然后通过静态方法使用它们。有关这方面的完整示例,请访问

src文件夹中的Kepp ur属性文件和以下代码足以读取属性文件

  **File file = new File("./src/config.properties");
  FileReader reader = new FileReader(file);
  prop.load(reader);
  System.out.println(prop.getProperty("directorypath"));**

谢谢大家的回答。我忘了提到我正在通过eclipse启动tomcat。属性文件被复制到:C:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\WebAppName\WEB-INF\classes。现在我在项目根目录和src文件夹中有一个props文件的副本,但我无论如何都无法访问它。您的pojo类在哪里?以上假设它们都是由相同的类装入器装入的。这就是方法。最好通过类加载器加载资源,以避免依赖于本地文件系统安排、当前工作目录等。当然,资源位置必须位于类路径上,因此WEB-INF/classes是一个好地方。顺便说一句,如果省略斜杠-getResourceAsStream(“props.properties”)-该资源应与当前类位于同一个包中。您可能应该详细说明为什么这样做更好/与在类上调用getResourceAsStream而不是在类加载器上调用getResourceAsStream相比有什么折衷。
  **File file = new File("./src/config.properties");
  FileReader reader = new FileReader(file);
  prop.load(reader);
  System.out.println(prop.getProperty("directorypath"));**