【问题标题】:How to use a .properties file in Eclipse Java Dynamic Web Project?如何在 Eclipse Java 动态 Web 项目中使用 .properties 文件?
【发布时间】:2013-10-28 18:05:49
【问题描述】:

我正在 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 时出现问题。它位于哪里?它和你的班级在同一个包里吗?

标签: java eclipse jakarta-ee properties


【解决方案1】:

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

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

更多详情请点击此链接-FileNotFoundException when using java properties file

【讨论】:

  • 是的!我刚刚发现我给出的路径是指eclipse文件夹。我检查了图像。在那里,您使用 .properties 文件的绝对路径。但是,当我在某些地方托管我的项目时,这是行不通的(给出绝对路径)。我只想知道是否有任何标准方式保留 .properties 文件并访问它。谢谢!
  • 这不是使用属性文件的正确方式。不推荐使用绝对路径。如果您的文件在 C:\\a.properties 中并且您使用完整路径并且明天您在 linux 中部署您的 WAR,这将不起作用。查看 Nitind 答案
【解决方案2】:

通常,您确保属性文件位于项目运行时类路径中(例如 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-INF/classes(我认为)。

【讨论】:

  • 是的!我刚刚发现我给出的路径是指eclipse文件夹。你的意思是我应该将.properties文件保存在使用.properties文件的类所在的包中?
  • @Dilma:这不是绝对必要的。您可以将它放在任何地方,但最简单(也是更好的做法)至少确保它位于运行时类路径中。它甚至不需要是源文件夹——只需声明为资源位置的某个地方(例如 ext 文件夹)。
【解决方案3】:

您应该改用更便携的java.util.Properties#load(InputStream),结果为javax.servlet.ServletContext#getResourceAsStream(String)

【讨论】:

  • 这是正确的做法。我们必须将文件放在 Maven 项目的 {YourApp}\src\main\resources 中。在非 Maven 动态 Web 项目中的 WebContent 下
【解决方案4】:

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

【讨论】:

    【解决方案5】:

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

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

    InputStream inputStream = 
        getClass().getClassLoader().getResourceAsStream("database.properties");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-06
      • 2012-10-05
      • 2012-05-15
      • 2011-09-10
      • 2011-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多