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();
    }

有什么问题还是有什么地方我应该放属性文件。

4

5 回答 5

6

您所做的是正确的,即右键单击项目和新文件。您必须将属性放在您启动 jvm 的位置。请查看所附图片。属性文件标记为红色。查看您的属性文件是否也位于这样的位置。还要在你的代码中添加这个来找出你的文件放在哪里:

System.out.println(new File(".").getAbsolutePath());

有关更多详细信息,请点击此链接- FileNotFoundException when using java properties file

在此处输入图像描述

于 2013-10-28T18:33:07.493 回答
4

相反,您应该使用更便携java.util.Properties#load(InputStream)javax.servlet.ServletContext#getResourceAsStream(String).

于 2013-10-28T18:12:24.330 回答
4

通常,您确保属性文件位于项目运行时类路径中(例如 WEB-INF/classes),然后使用系统类加载器或属性文件处理程序的类加载器加载它,即(从内存中徒手输入 -- 未编译

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(我认为)。

于 2013-10-28T18:16:45.227 回答
1

尝试给出属性文件的绝对路径或相对路径,还要检查此属性文件路径是否已添加到源文件夹,如果没有,则不会将其复制到您的类文件夹。(右键单击项目,检查源选项卡下的 java 构建路径。

于 2013-10-28T18:12:02.717 回答
1

您应该在与使用它的类相同的包中拥有.properties文件。

或者更好的是,使用方法读取属性文件getResourceAsStream(否则当您在 .war 存档中有文件时可能会遇到一些问题)。

InputStream inputStream = 
    getClass().getClassLoader().getResourceAsStream("database.properties");
于 2013-10-28T18:14:47.893 回答