如何在Eclipse Java动态Web项目中使用.properties文件?

6

我正在Eclipse中开发一个动态Web项目。我创建了一个.properties文件,用于存储数据库的详细信息(用户名、密码等)。我通过右键单击项目并选择“New -> File”添加了它。我使用了Java util包Properties类。但是它不起作用。我无法从文件中检索任何属性。这里是我使用的代码:

Properties prop = new Properties();

    try {

        prop.load(new FileInputStream("database.properties"));

        String db = prop.getProperty("database");
        String userName = prop.getProperty("dbuser");
        String password = prop.getProperty("dbpassword");

    } catch (IOException ex) {
        ex.printStackTrace();
    }

有什么问题或者我应该把属性文件放在哪个特定的位置吗?


似乎在查找database.properties时出现了问题。它在哪里?它是否位于您的类所在的同一包中? - alicia
5个回答

6
你所做的是正确的,即右键单击项目并选择新建文件。你需要将属性放在启动jvm的位置。请查看附图。属性文件用红色标记。查看一下你的属性文件是否也位于类似这样的位置。 同时,在你的代码中添加以下内容以找出应该将文件放在哪里:
System.out.println(new File(".").getAbsolutePath());

请点击此链接了解更多详情- 使用java属性文件时出现FileNotFoundException

enter image description here


2
是的!我刚刚发现我给出的路径指的是eclipse文件夹。我检查了图片。你在使用.properties文件的绝对路径。但是当我将我的项目托管到其他地方时,这种方法就行不通了(给出绝对路径)。我只想知道是否有标准的方法来保存.properties文件并访问它。谢谢! - Dilma
1
这不是使用属性文件的正确方式。不建议使用绝对路径。如果您的文件在C:\a.properties中,并且您使用完整路径,明天您在Linux上部署WAR,这将无法正常工作。请参见Nitind的答案。 - Oliver

4
通常情况下,您需要确保属性文件位于项目运行时类路径中(例如WEB-INF/classes),然后使用System类加载器或属性文件处理程序的类加载器来加载它。即(从记忆中自由手打 - 未编译)。
try{
     Properties p = new Properties();
     InputStream in = MyPropertyHandler.getClass()
           .getClassLoader()
           .getResourceAsStream("com/package/props/database.properties");
     p.load(in);
catch(IOException e){
     e.printStackTrace(System.err);
}

我猜你可能没有指向正确的位置。请确保你的属性文件放在了正确的位置。使用这段代码,我相信它是在寻找 ${CURRENT_WORKING_DIR}/database.properties, 如果是在eclipse中的web应用程序,则应该是 WEB-INF/classes(我想是这样的)。


是的!我刚刚发现我给出的路径指的是eclipse文件夹。你的意思是我应该将.properties文件放在使用它的类所在的包中吗? - Dilma
@Dilma:这并不是必须的。你可以把它放在任何地方,但最好的做法是至少确保它在运行时类路径中。它甚至不需要是源文件夹——只要声明为资源位置的某个地方即可(例如ext文件夹)。 - MadConan

4
你应该使用更具可移植性的 java.util.Properties#load(InputStream) 方法,而不是使用 javax.servlet.ServletContext#getResourceAsStream(String) 方法返回结果。

2
这是正确的做法。在Maven项目中,我们必须将文件放置在{YourApp}\src\main\resources下。而在非Maven动态Web项目中,则应该放在WebContent目录下。 - Oliver

1
您应该在使用它的类相同的包中拥有 .properties 文件。
或者更好的方法是使用 getResourceAsStream 方法读取属性文件(否则,当您将文件放入 .war 存档文件中时,稍后可能会遇到某些问题)。
InputStream inputStream = 
    getClass().getClassLoader().getResourceAsStream("database.properties");

1
尝试使用绝对路径或相对路径来指定属性文件的位置,同时检查该属性文件路径是否已添加到源文件夹中。如果没有添加,它将不会被复制到您的类文件夹中。(右键单击项目,在源选项卡下检查Java构建路径。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接