在java中读取.properties文件

时间:2013-08-16 19:06:24

标签: java

我在conf / Config.properties位置创建了一个属性文件。该文件夹位于Eclipse中项目的根文件夹下。我还将其添加到.classpath。

我正在使用以下代码从此文件中读取数据:

InputStream in = getClass().getResourceAsStream("conf/Config.properties");
Properties properties = new Properties();
properties.load(in);
String fromEmail = properties.getProperty("emailID");
System.out.println("from email is " + fromEmail);
String fromEmailPass = properties.getProperty("emailPass");
String host = properties.getProperty("host");

这给出了错误:

java.lang.NullPointerException
    at java.util.Properties$LineReader.readLine(Properties.java:418)
    at java.util.Properties.load0(Properties.java:337)
    at java.util.Properties.load(Properties.java:325)
    at com.sendum.integration.activities.notifications.ActivityImplSendActivationEmail.activateEmail(ActivityImplSendActivationEmail.java:23)

如何从.properties文件中读取数据?

6 个答案:

答案 0 :(得分:5)

getClass().getResourceAsStream("conf/Config.properties");尝试从相对于您的类位置的路径加载资源。

使用:

  • getClass().getResourceAsStream("/conf/Config.properties");(请注意前导/这是绝对路径)或
  • getClass().getClassLoader().getResourceAsStream("conf/Config.properties");(请注意,您使用的是绝对路径,但不需要前导/

编辑:我对您的目录结构和类路径感到困惑。根据您的评论我现在明白您的文件夹结构是:

<Project folder>
   - src/
       // .java files
   - conf/
       Config.properties

您说您已将conf添加到类路径中。所以我知道你在Eclipse中有两个源文件夹。如果是这种情况,那么srcconf都是您的根包,您应该更改上面的命令,如下所示:

  • getClass().getResourceAsStream("/Config.properties");
  • getClass().getClassLoader().getResourceAsStream("Config.properties");

答案 1 :(得分:3)

似乎getClass().getResourceAsStream("conf/Config.properties");返回null。这意味着目前它没有找到该文件。

尝试使用getReasourceAsStream("./conf/Config.properties")。这是相对路径,因为它从当前目录开始,然后找到conf/Config.properties 尝试使用绝对路径getReasourceAsStream("/Users/user/filepath/conf/Config.properties")

有关类似信息,请参阅here

答案 2 :(得分:0)

在您的信息流路径中,它会尝试从相对路径加载资源到您的班级位置

将您的InputStream更改为

InputStream in = getClass().getResourceAsStream("../conf/Config.properties");

或以其他方式在InputStream中提供文件位置的完整路径

答案 3 :(得分:0)

尝试

getClass().getClassLoader().getResourceAsStream("conf/Config.properties");

答案 4 :(得分:0)

Try the below code for fetching the data from the properties file.

Properties prop = new Properties();
InputStream input = null;

input = this.getClass().getClassLoader().getResourceAsStream("conf/Config.properties");

// load a properties file
prop.load(input);

String str = prop.getProperty("key");//like userName

答案 5 :(得分:0)

您也可以执行以下操作。

public static void loadPropertiesToMemory() {
    Properties prop = new Properties();
    InputStream input = null;
    String filePathPropFile = "configuration.properties";
    try {
        input = App.class.getClassLoader().getResourceAsStream(filePathPropFile);
        prop.load(input);
    } catch (IOException ex) {
        ex.printStackTrace();
    } 
}

App是组成加载属性文件的方法的类。这种方式使用getResourceAsStream()的{​​{1}}方法。此方法采用要加载的文件(或资源)的路径。此方法将所有路径视为绝对路径。也就是说,如果仅提供文件名,它将在项目文件夹(例如conf,src)中搜索文件。

请注意,为此方法提供的路径不应以“ /”开头,因为该路径被视为隐式绝对路径。